В React редьюсер — это чистая функция, которая принимает текущее состояние и действие и возвращает новое состояние на основе действия. Редьюсер обычно используется в сочетании с хуком useReducer
, который обеспечивает способ управления состоянием в функциональных компонентах.
Вот пример простого редуктора:
function counterReducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: throw new Error('Unexpected action'); } }
В этом примере функция counterReducer
принимает объект state
и объект action
. Объект state
представляет текущее состояние счетчика, а объект action
представляет действие, которое следует выполнить над состоянием.
Редюсер использует оператор switch
, чтобы определить, какое действие следует выполнить. В этом случае единственными двумя действиями являются 'increment'
и 'decrement'
, которые либо увеличивают, либо уменьшают счетчик на 1. Если редьюсер получает неожиданное действие, он выдает ошибку.
Чтобы использовать counterReducer
в функциональном компоненте, мы можем использовать хук useReducer
:
import React, { useReducer } from 'react'; function Counter() { const [state, dispatch] = useReducer(counterReducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>+</button> <button onClick={() => dispatch({ type: 'decrement' })}>-</button> </div> ); }
В этом примере мы используем хук useReducer
для инициализации состояния до { count: 0 }
и для настройки функции dispatch
, которая используется для отправки действий редюсеру. Когда пользователь нажимает кнопку +
или -
, мы вызываем dispatch
с соответствующим действием ({ type: 'increment' }
или { type: 'decrement' }
). Затем редюсер обновляет состояние в зависимости от действия, и компонент перерисовывается с новым состоянием.