React, ESLint: зависимость eslint-plugin-react-hooks от функции в объекте

Я не уверен, что это ошибка, но тогда мне нужно объяснение. Рассмотрим следующий код:

const someCallback = useCallback(() => console.log(someObj.someChildObject), [someObj.someChildObject])

Правило ESLint не предупреждает об отсутствующих или неправильных зависимостях, однако следующий код дает предупреждение об отсутствии someObj зависимость:

const someCallback = useCallback(() => someObj.someChildFunction(), [someObj.someChildFunction])

Может кто-нибудь объяснить, почему второй пример выдает предупреждение? Или это действительно ошибка? Используя версию 4.0.8eslint-plugin-react-hooks пакет

1 ответ

Решение

Может кто-нибудь объяснить, почему второй пример выдает предупреждение?

Хотя функция может быть такой же, результат, который она производит, может зависеть от вызывающего контекста, т.е. someObj.

Рассмотрим следующий пример для простоты.

// assume someObj is just a number and someChildFunction is toString
someObj = Math.random();

// you can't memoize based on the function itself because it uses context
const someCallback = useCallback(() => someObj.toString(), [someObj.toString])

toString одинаково для каждого числа 5..toString === 4..toString но результат, который он производит, зависит от числа.

Другие вопросы по тегам