TGViewer
Заметки про React Заметки про React @ru_react_notes · 3.44K subscribers
Post #491 3.24K
Негласные правила React хуков

При объявлении хука useEffect нужно указывать список зависимостей, массив переменных, которые используются внутри хука. Например:


const [x, setX] = useState(0);
useEffect(() => {
console.log(x);
}, []);


В этом случае хук объявлен неправильно, переменная x не указана как зависимость. Однако, это правило не универсальное. Некоторые переменные являются стабильными, т.е. ссылка на них не меняется при ре-рендере, и их можно не указывать. Для того чтобы не ошибаться, нужно использовать плагин eslint-plugin-react-hooks. Например, какие переменные плагин считает стабильными:


const [state, setState] = useState() / React.useState()
// ^^^ стабильная ссылка
const [state, dispatch] = useReducer() / React.useReducer()
// ^^^ стабильная ссылка
const [state, dispatch] = useActionState() / React.useActionState()
// ^^^ стабильная ссылка
const ref = useRef()
// ^^^ стабильная ссылка
const onStuff = useEffectEvent(() => {})
// ^^^ стабильная ссылка
Остальные ссылки не стабильны


В своем блоге автор высказывает мнение, что есть недостаток в этом подходе. Если использовать хуки из сторонних библиотек, то возвращаемые в них переменные всегда нужно указывать в зависимостях эффекта. Это может быть setter useAtom из Jotai или вызов функции useMutation из tanstack-query. По идее эти переменные тоже стабильные, но их придется указывать в зависимостях, иначе будет ошибка плагина eslint-plugin-react-hooks.

https://macwright.com/2024/09/19/the-extra-rules-of-hooks
macwright.com The unspoken rules of React hooks
  • 👎 36
  • 👍 7
More from @ru_react_notes
  1. Jun 24, 2025Реактивность – это легко Стандартный useContext заставляет обновляться все компоненты-потр…
  2. Jun 17, 2025Остерегайтесь скрытых проблем при работе с search params Типо-безопасность — это только ве…
  3. Jun 4, 2025Почему Error Boundary, а не просто try/catch для компонентов В React нельзя использовать t…
  4. May 29, 2025Анонс TypeScript Native Вышла превью версия TypeScript написанная на Go. Ее можно установи…
  5. May 27, 2025Управление фокусом в React с помощью flushSync Установить фокус на инпуте сразу в React мо…
  6. May 15, 2025TanStack DB TanStack представила новую библиотеку – TanStack DB – реактивный клиентский ст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →