React hooks——useReducer

一、简介

useReducer 是 React 提供的一个高级 Hook,用于管理复杂的状态逻辑。它类似于 Redux 中的 reducer 模式,适合处理包含多个子值、依赖前一个状态或逻辑复杂 的状态更新场景。与 useState 相比,useReducer 提供更结构化的状态管理方式。

1.1 核心概念

  • Reducer 函数

纯函数,接收当前状态 state 和操作指令 action,返回新状态:

javascript 复制代码
(state, action) => newState
  • Action

描述状态变化的普通对象,通常包含 type 字段(操作类型)和可选数据 payload

  • Dispatch 函数

用于触发状态更新,调用方式:dispatch(action)

  • 初始状态

可直接提供初始值,或通过 惰性初始化函数 生成(适合复杂初始逻辑)。


1.2 基础语法

javascript 复制代码
const [state, dispatch] = useReducer(reducer, initialArg, init?);
  • reducer:处理状态更新的函数。

  • initialArg:初始状态值或初始化函数的参数。

  • init(可选):初始化函数,返回初始状态。

  • init 函数(直接初始值):

    javascript 复制代码
    const [state, dispatch] = useReducer(reducer, { count: 0 });
  • init 函数(惰性初始化):

    javascript 复制代码
    const [state, dispatch] = useReducer(reducer, initialArg, init);
    • initialArg:传递给 init 函数的参数。

    • init:函数,接收 initialArg 并返回实际初始状态。

二、代码实现

javascript 复制代码
import React, { useReducer } from "react";

function reducer(state, action) {
  switch (action.type) {
    case "INC":
      return state + 1;
    case "DEC":
      return state - 1;
    case "TO10":
      return 10;
    default:
      return state - 1;
  }
}

export default function App() {
  const [num, dispatch] = useReducer(reducer, 0);
  return (
    <div>
      <div>当前值:{num}</div>
      <button onClick={() => dispatch({ type: "INC" })}>+1</button>
      <button onClick={() => dispatch({ type: "DEC" })}>-1</button>
      <button onClick={() => dispatch({ type: "TO10" })}>to10</button>
    </div>
  );
}
相关推荐
不会聊天真君6471 小时前
JavaScript基础语法(Web前端开发笔记第三期)
前端·javascript·笔记
齐鲁大虾1 小时前
新人编程语言选择指南
javascript·c++·python·c#
IT_陈寒1 小时前
SpringBoot自动配置这破玩意儿又坑我一次
前端·人工智能·后端
妖精的羽翼1 小时前
前端(Vue)→ 全栈 + AI 应用开发
前端
码路飞2 小时前
玩了一圈 AI 编程工具,Background Agent 才是让我真正震撼的东西
前端·javascript
UCloud_TShare2 小时前
优刻得发布云搜索服务CSS:面向AI时代的企业级搜索基础设施
前端·css·人工智能
林恒smileZAZ2 小时前
Three.js实现更真实的3D地球[特殊字符]动态昼夜交替
开发语言·javascript·3d
月月大王的3D日记2 小时前
别再复制粘贴了,从零拆解 3D 场景的诞生过程
javascript
木斯佳2 小时前
前端八股文面经大全:字节暑期前端一面(2026-04-21)·面经深度解析
前端·面试·校招·面经·实习