Обзор хуков¶
Хуки позволяют вам использовать различные функции React из ваших компонентов. Вы можете использовать встроенные хуки или комбинировать их для создания своих собственных. На этой странице перечислены все встроенные хуки в React.
Хуки состояния¶
Состояние позволяет компоненту "запоминать" информацию, например, вводимую пользователем. Например, компонент формы может использовать состояние для хранения значения ввода, а компонент галереи изображений - для хранения индекса выбранного изображения.
Чтобы добавить состояние в компонент, используйте один из этих хуков:
useState
объявляет переменную состояния, которую вы можете обновлять напрямую.useReducer
объявляет переменную состояния с логикой обновления внутри функции reducer.
1 2 3 4 |
|
Контекстные хуки¶
Контекст позволяет компоненту получать информацию от удаленных родителей, не передавая ее в виде пропсов. Например, компонент верхнего уровня вашего приложения может передавать текущую тему пользовательского интерфейса всем компонентам ниже, независимо от глубины.
useContext
читает и подписывается на контекст.
1 2 3 4 |
|
Реф хуки¶
Рефы позволяют компоненту хранить некоторую информацию, которая не используется для рендеринга, например, узел DOM или идентификатор таймаута. В отличие от состояния, обновление рефа не приводит к повторному рендерингу компонента. Рефы - это "аварийный люк" из парадигмы React. Они полезны, когда вам нужно работать с системами, не относящимися к React, например, со встроенными API браузера.
useRef
объявляет реф. Вы можете хранить в нем любое значение, но чаще всего он используется для хранения узла DOM.useImperativeHandle
позволяет вам настроить реф, открываемый вашим компонентом. Это редко используется.
1 2 3 4 |
|
Хуки эффектов¶
Эффекты позволяют компоненту подключаться к внешним системам и синхронизироваться с ними Это включает работу с сетью, DOM браузера, анимацией, виджетами, написанными с использованием другой библиотеки UI, и другим не-React кодом.
useEffect
подключает компонент к внешней системе.
1 2 3 4 5 6 7 8 |
|
Эффекты - это "аварийный люк" из парадигмы React. Не используйте эффекты для оркестровки потока данных в вашем приложении. Если вы не взаимодействуете с внешней системой, возможно, вам не нужен эффект.
Есть две редко используемые вариации useEffect
с различиями во времени:
useLayoutEffect
срабатывает до того, как браузер перерисовывает экран. Вы можете измерить компоновку здесь.useInsertionEffect
срабатывает до того, как React внесет изменения в DOM. Здесь библиотеки могут вставлять динамические CSS.
Хуки производительности¶
Общий способ оптимизации производительности повторного рендеринга - пропустить ненужную работу. Например, вы можете указать React повторно использовать кэшированные вычисления или пропустить повторный рендеринг, если данные не изменились с момента предыдущего рендеринга.
Чтобы пропустить вычисления и ненужный повторный рендеринг, используйте один из этих хуков:
useMemo
позволяет кэшировать результат дорогостоящего вычисления.useCallback
позволяет кэшировать определение функции перед передачей ее оптимизированному компоненту.
1 2 3 4 5 6 7 |
|
Иногда нельзя пропустить повторный рендеринг, потому что экран действительно должен обновляться. В этом случае можно повысить производительность, отделив блокирующие обновления, которые должны быть синхронными (например, ввод данных в поле ввода), от неблокирующих обновлений, которые не должны блокировать пользовательский интерфейс (например, обновление графика).
Чтобы установить приоритет рендеринга, используйте один из этих хуков:
useTransition
позволяет пометить переход состояния как неблокирующий и разрешить другим обновлениям прерывать его.useDeferredValue
позволяет отложить обновление некритичной части пользовательского интерфейса и позволить другим частям обновляться первыми.
Хуки ресурсов¶
Компонент может получить доступ к ресурсам, не имея их в качестве части своего состояния. Например, компонент может прочитать сообщение из Promise или прочитать информацию о стиле из контекста.
Чтобы прочитать значение из ресурса, используйте этот хук:
1 2 3 4 5 |
|
Другие хуки¶
Эти хуки в основном полезны авторам библиотек и не часто используются в коде приложения.
useDebugValue
позволяет вам настроить метку, которую React DevTools отображает для вашего пользовательского хука.useId
позволяет компоненту связать с собой уникальный ID. Обычно используется в API доступности.useSyncExternalStore
позволяет компоненту подписаться на внешний магазин.
Ваши собственные хуки¶
Вы также можете определить собственные пользовательские хуки как функции JavaScript.
Источник — https://react.dev/reference/react/hooks