目录

useReducer-是-React-Hooks-提供的状态管理工具,用于处理-复杂状态逻辑

目录

useReducer 是 React Hooks 提供的状态管理工具,用于处理 复杂状态逻辑

useReducer 是 React Hooks 提供的状态管理工具,其核心作用是将状态更新逻辑与 UI 组件分离.

一、useReducer 编写流程
1.定义初始状态(initialState)
声明需要管理的状态结构,通常是一个对象(适合多状态值的场景)。
jsx

const initialState = {
  count: 0,
  status: 'idle'
};

2.创建 reducer 函数
reducer 是一个纯函数,接收当前 state 和 action,根据 action.type 返回新的状态(禁止直接修改原状态)。
state:当前状态
action:一个包含 type(必选,标识操作类型)和 payload(可选,传递数据)的对象
jsx

function reducer(state, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { ...state, count: state.count + 1 }; // 返回新状态
    case 'DECREMENT':
      return { ...state, count: state.count - 1 };
    case 'SET_STATUS':
      return { ...state, status: action.payload }; // 接收 payload 更新状态
    default:
      throw new Error('未知 action 类型');
  }
}

3.在组件中使用 useReducer
调用 useReducer,传入 reducer 和 initialState,返回 [state, dispatch]:
state:当前状态值
dispatch:用于触发状态更新的函数(接收 action 作为参数)
jsx

import { useReducer } from 'react';

function Counter() {
  // 初始化 useReducer
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <p>计数{state.count}</p>
      <p>状态{state.status}</p>
      {/* 调用 dispatch 触发状态更新 */}
      <button onClick={() => dispatch({ type: 'INCREMENT' })}> 1</button>
      <button onClick={() => dispatch({ type: 'DECREMENT' })}> 1</button>
      <button onClick={() => dispatch({ type: 'SET_STATUS', payload: 'active' })}>
        更改状态
      </button>
    </div>
  );
}

二、useReducer 的核心作用

处理复杂状态逻辑
例如:表单多字段校验、购物车加减库存 + 选中状态联动等。

状态逻辑复用
reducer 函数可独立抽离(无需重复编写 setState 逻辑)。

优化多组件通信
减少 props 层级嵌套。

三、与 useState 的区别
useState 适合 简单状态(如单个值、独立状态)
useReducer 适合 复杂状态逻辑(多状态联动、多条件更新)

例如:管理一个包含 “用户信息、登录状态、权限列表” 的组件,用 useReducer 会比多个 useState 更高效。