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
но результат, который он производит, зависит от числа.