Обзор хуков¶
Хуки позволяют вам использовать различные функции 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