Использование useReducer в React для расширенного управления состоянием

В React хук useReducerиспользуется для управления сложными состояниями и переходами состояний. Это альтернатива хуку useState, если у вас есть более сложные потребности в управлении состоянием. useReducerследует тем же принципам, что и библиотека Redux, где вы определяете функцию редуктора для обработки обновлений состояния.

Вот пример использования useReducerв React:

import React, { useReducer } from 'react';
// Reducer function
const reducer = (state, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return { count: state.count + 1 };
    case 'DECREMENT':
      return { count: state.count - 1 };
    default:
      return state;
  }
};
const Counter = () => {
  const [state, dispatch] = useReducer(reducer, { count: 0 });
  const increment = () => {
    dispatch({ type: 'INCREMENT' });
  };
  const decrement = () => {
    dispatch({ type: 'DECREMENT' });
  };
  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
};
export default Counter;

В приведенном выше примере мы определяем функцию reducer, которая принимает текущее состояние и действие и возвращает новое состояние в зависимости от типа действия. Перехватчик useReducerвызывается с помощью функции reducerи начального состояния ({ count: 0). Он возвращает текущее состояние и функцию dispatch, которая используется для отправки действий в редуктор.

Вызывая dispatchс соответствующим типом действия, мы можем обновлять состояние предсказуемым образом. В данном случае состояние представляет собой простой объект со свойством count. Функции incrementи decmentотправляют соответствующие действия для обновления счетчика.