React 词条目录
前端Wiki/词条/useReducer

useReducer

定义useState 的进阶版,用 reducer 函数集中管理多字段、多规则的状态流转

当状态更新逻辑超过两行、或者一个操作要同时改多个关联字段时,继续用一堆 useState 会让代码散落得到处都是。useReducer 把所有变更收拢到一个 reducer 纯函数里:传入当前 state 与 action,返回新 state。组件只负责派发 action,逻辑与视图解耦,测试也更容易。

经典搭档场景是复杂表单:一个 action 携带字段名和值,reducer 里统一更新; undo/redo、分页器、购物车这种规则多的场景同样适合。初学者别把它神化——能一个 useState 搞定的简单状态,硬套 reducer 反而增加模板代码。

JavaScript
import { useReducer } from 'react';

function formReducer(state, action) {
  switch (action.type) {
    case 'field':
      return { ...state, [action.name]: action.value };  // 不可变更新
    case 'reset':
      return { name: '', age: '' };
    default:
      return state;
  }
}

function Form() {
  const [state, dispatch] = useReducer(formReducer, { name: '', age: '' });
  return (
    <form>
      <input value={state.name}
        onChange={(e) => dispatch({ type: 'field', name: 'name', value: e.target.value })} />
      <button type="button" onClick={() => dispatch({ type: 'reset' })}>重置</button>
    </form>
  );
}
⚠ 常见误区
🔗 相关词条useState 状态基础多字段表单统一处理
← 返回来源章节useState 状态基础