React Hooks (Хуки) - itgirlschool/wiki GitHub Wiki
Что такое хуки?
Хуки — нововведение в React 16.8, которое позволяет использовать состояние и другие возможности React без написания классов. React содержит несколько встроенных хуков, таких как useState. Вы также можете создавать собственные хуки, чтобы повторно использовать их в других своих компонентах.
Плюсы хуков
- Хуки позволяют вам повторно использовать логику состояния, не затрагивая дерево компонентов.
- Хуки позволяют разбить один компонент на маленькие функции по их назначению (например, подписке или загрузке данных).
- Хуки позволяют использовать больше возможностей React без написания классов.
Правила хуков
Хуки — это функции JavaScript, которые налагают два дополнительных правила:
- Хуки следует вызывать только на верхнем уровне. Не вызывайте хуки внутри циклов, условий или вложенных функций.
- Хуки следует вызывать только из функциональных компонентов React. Не вызывайте хуки из обычных JavaScript-функций. Есть только одно исключение, откуда можно вызывать хуки — это ваши пользовательские хуки. Мы расскажем о них далее.
Основные хуки
useState
const [state, setState] = useState(initialState);
Возвращает значение с состоянием и функцию для его обновления.
Во время первоначального рендеринга возвращаемое состояние (state) совпадает со значением, переданным в качестве первого аргумента (initialState).
Функция setState используется для обновления состояния. Она принимает новое значение состояния и ставит в очередь повторный рендер компонента.
setState(newState);
Во время последующих повторных рендеров первое значение, возвращаемое useState, всегда будет самым последним состоянием после применения обновлений.
useEffect
useEffect(didUpdate);
Принимает функцию, которая содержит императивный код, возможно, с эффектами.
Мутации, подписки, таймеры, логирование и другие побочные эффекты не допускаются внутри основного тела функционального компонента (называемого этапом рендеринга React). Это приведёт к запутанным ошибкам и несоответствиям в пользовательском интерфейсе.
Вместо этого используйте useEffect. Функция, переданная в useEffect, будет запущена после того, как рендер будет зафиксирован на экране. Думайте об эффектах как о лазейке из чисто функционального мира React в мир императивов.
По умолчанию эффекты запускаются после каждого завершённого рендеринга, но вы можете решить запускать их только при изменении определённых значений.
useContext
const value = useContext(MyContext);
Принимает объект контекста (значение, возвращённое из React.createContext) и возвращает текущее значение контекста для этого контекста. Текущее значение контекста определяется пропом value ближайшего <MyContext.Provider> над вызывающим компонентом в дереве.
Когда ближайший <MyContext.Provider> над компонентом обновляется, этот хук вызовет повторный рендер с последним значением контекста, переданным этому провайдеру MyContext. Запомните, аргументом для useContext должен быть непосредственно сам объект контекста:
Правильно: useContext(MyContext)
Неправильно: useContext(MyContext.Consumer)
Неправильно: useContext(MyContext.Provider)
Компонент, вызывающий useContext, всегда будет перерендериваться при изменении значения контекста. Если повторный рендер компонента затратен, вы можете оптимизировать его с помощью мемоизации.
Полезные источники
Наиболее полную информацию о хуках можно найти в соответствующем разделе на сайте ReactJS