как в данном примере useCallback он просит поместить в массив зависимостей функции. Это нормально? Если да, то для чего это вообще нужно? Не хочется во всем проекте городить
// eslint-disable-next-line react-hooks/exhaustive-deps
если удалишь пустой массив как зависимость, то эта ошибка останется?
Нет, ошибки не будет. Но мне интересно, почему он считает, что нужно добавить функции, которые используются
Да, я такое уже видела. Он требует все изменяемые данные чтобы записались в зависимости
The issue is that upon each render cycle, function is redefined. React uses shallow object comparison to determine if a value updated or not. Each render cycle function has a different reference https://stackoverflow.com/questions/62601538/passing-a-function-in-the-useeffect-dependency-array-causes-infinite-loop
только хотел скинуть...
вопрос был в том почему линтер просит поместить в массив функцию, в ссылке есть ответ
В этом вопросе разбирается, почему создается бесконечный цикл при передаче функций в массив зависимостей useEffect
ну я ещё специально выделил текст с ответом на твой вопрос, чтоб было понятно к чему ссылка
Предположим, в моем случае сохраняется ссылка на диспатч данных в useState. Что-то должно поменяться, если этого сохранения не будет?
если не сохраняется, то на каждый рендер создаётся новая ссылка на функцию, соответственно эффект будет каждый раз запускаться
Ты может путаешь поведение, когда в массиве зависимостей само значение из useState? Иначе почему мы во всех массивах зависимостей не указываем эти функции для изменения стейта?
потому что нам не нужно реагировать на переопределение ссылки на функцию эффект как и usecallback/usememo в зависимостях ожидает все значения из пропсов/стейтов/функций которые используются в колбэке, когда ты туда ничего не передаешь линтер предупреждает тебя что что-то может пойти не так, ну или выводит ошибку, зависит от настроек
дока ESLint is not smart enough to understand the context everytime, it's a set of objective measurements. If you want to run something once, guaranteed, use an empty dependency array and suppress the warning. It's a warning, not an error. https://stackoverflow.com/questions/73296654/is-an-empty-dependency-array-for-react-useeffect-not-permissible
Обсуждают сегодня