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>
  );
}
相关推荐
遇到困难睡大觉哈哈1 小时前
Harmony os 静态卡片(ArkTS + FormLink)详细介绍
前端·microsoft·harmonyos·鸿蒙
用户47949283569151 小时前
Bun 卖身 Anthropic!尤雨溪神吐槽:OpenAI 你需要工具链吗?
前端·openai·bun
p***43481 小时前
前端在移动端中的网络请求优化
前端
g***B7382 小时前
前端在移动端中的Ionic
前端
拿破轮2 小时前
使用通义灵码解决复杂正则表达式替换字符串的问题.
java·服务器·前端
whltaoin2 小时前
【 Web认证 】Cookie、Session 与 JWT Token:Web 认证机制的原理、实现与对比
前端·web·jwt·cookie·session·认证机制
Aevget2 小时前
界面组件Kendo UI for React 2025 Q3亮点 - AI功能全面提升
人工智能·react.js·ui·界面控件·kendo ui·ui开发
Aerelin2 小时前
爬虫playwright入门讲解
前端·javascript·html·playwright
笙年3 小时前
JavaScript Promise,包括构造函数、对象方法和类方法
开发语言·javascript·ecmascript
桜吹雪3 小时前
LangChain.js/DeepAgents可观测性
javascript·人工智能