useReducer— это перехватчик в React, который позволяет управлять сложной логикой состояний с помощью функции редуктора. Это похоже на то, как работает useState, но больше подходит для управления состоянием, которое включает в себя несколько значений и сложные обновления.
Вот как работает useReducer:
-
Определите начальное состояние. Вы начинаете с определения начального состояния вашего компонента. Это может быть примитивное значение, объект или массив.
-
Создайте функцию редуктора. Функция редуктора отвечает за обновление состояния на основе отправленных действий. Он принимает текущее состояние и объект действия в качестве аргументов и возвращает новое состояние. Функция редуктора соответствует определенному шаблону:
(state, action) =>newState. -
Инициализируйте редуктор. В своем компоненте вы вызываете хук
useReducerи передаете функцию редуктора и начальное состояние. Он возвращает массив с двумя элементами: текущим состоянием и функцией отправки. -
Действия диспетчеризации. Чтобы обновить состояние, вы вызываете функцию диспетчеризации, возвращаемую
useReducer, и передаете объект действия. Объект действия обычно имеет свойствоtype, которое описывает тип выполняемого действия и дополнительные данные, если необходимо. -
Reducer обновляет состояние: функция редуктора получает текущее состояние и объект действия. Он выполняет необходимую логику в зависимости от типа действия и возвращает новое состояние. Затем React повторно отображает компонент с обновленным состоянием.
Используя useReducer, вы можете централизовать логику состояния и обрабатывать сложные обновления состояния с помощью более декларативного и предсказуемого подхода.
Вот несколько методов, связанных с useReducer:
-
dispatch: функция диспетчеризации возвращается хукомuseReducerи используется для отправки действий по обновлению состояния. -
Типы действий. Вы можете определить различные типы действий как константы для представления различных действий, которые можно выполнить над состоянием. Например:
const INCREMENT = 'INCREMENT'. -
Полезная нагрузка действия: вы можете передать дополнительные данные вместе с объектом действия, чтобы предоставить дополнительную информацию для обработки редуктором. Например:
{ type: 'SET_NAME', полезная нагрузка: 'John'. -
useEffect и useReducer: вы можете комбинировать
useEffectсuseReducerдля выполнения побочных эффектов, таких как сетевые запросы или подписки, при изменении состояния.