Академический Документы
Профессиональный Документы
Культура Документы
ХУКИ
ХУКИ
📌 Хук состояния
Рассмотрим пример, в котором рендерится счётчик. Если вы нажмёте
на кнопку, значение счётчика будет инкрементировано.
import React, { useState } from 'react';
function Example() {
// Объявляем новую переменную состояния "count"
const [count, setCount] = useState(0);
return (
<div>
<p>Вы нажали {count} раз</p>
<button onClick={() => setCount(count + 1)}>
Нажми на меня
</button>
</div>
);
}
Эффекты со сбросом
Зачем мы вернули функцию из нашего эффекта? Это необязательный
механизм сброса эффектов. Каждый эффект может возвратить функцию,
которая сбросит его. Это даёт нам возможность объединить вместе логику
оформления и отмены подписки. Они, всё-таки, часть одного и того же
эффекта!
Создание
пользовательских
хуков
Создание пользовательских хуков позволяет вам перенести логику
компонентов в функции, которые можно повторно использовать.
useContext
Принимает объект контекста (значение, возвращённое
из React.createContext) и возвращает текущее значение контекста для этого
контекста.
useReducer
const [state, dispatch] = useReducer(reducer, initialArg, init);
Альтернатива для useState. Принимает редюсер типа (state, action) =>
newState и возвращает текущее состояние в паре с методом dispatch. (Если
вы знакомы с Redux, вы уже знаете, как это работает.)
useCallback
const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);
Возвращает мемоизированный колбэк.
Передайте встроенный колбэк и массив зависимостей.
Хук useCallback вернёт мемоизированную версию колбэка, который
изменяется только, если изменяются значения одной из зависимостей. Это
полезно при передаче колбэков оптимизированным дочерним
компонентам, которые полагаются на равенство ссылок для
предотвращения ненужных рендеров
useMemo
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
Возвращает мемоизированное значение.
Передайте «создающую» функцию и массив зависимостей. useMemo будет
повторно вычислять мемоизированное значение только тогда, когда
значение какой-либо из зависимостей изменилось.
useRef
const refContainer = useRef(initialValue);
useRef возвращаетизменяемый ref-объект, свойство .current которого
инициализируется переданным аргументом (initialValue). Возвращённый
объект будет сохраняться в течение всего времени жизни компонента.
useImperativeHandle
useImperativeHandle(ref, createHandle, [deps])
useImperativeHandle настраивает
значение экземпляра, которое
предоставляется родительским компонентам при использовании ref. Как
всегда, в большинстве случаев следует избегать императивного кода,
использующего ссылки. useImperativeHandle должен использоваться
с forwardRef:
useLayoutEffect
Сигнатура идентична useEffect, но этот хук запускается синхронно после всех
изменений DOM. Используйте его для чтения макета из DOM и синхронного
повторного рендеринга. Обновления, запланированные
внутри useLayoutEffect, будут полностью применены синхронно перед тем, как
браузер получит шанс осуществить отрисовку.
useDebugValue
useDebugValue(value)
useDebugValue может
использоваться для отображения метки для
пользовательских хуков в React DevTools.