В 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' }). Затем редюсер обновляет состояние в зависимости от действия, и компонент перерисовывается с новым состоянием.