React-Hooks-useReducer
useReducer Hook 概述
- 从名称来看, 很多人会误以为 useReducer 是用来替代 Redux 的, 但是其实不是
- useReducer 是 useState 的一种替代方案, 可以让我们很好的复用操作数据的逻辑代码
首先来用一个案例来带出 useReducer 的使用,案例大致内容为,分别定义了不同的组件然后在各个组件当中编写,自增自减的业务如下:
import React, {useState} from 'react';
function Home() {
const [numState, setNumState] = useState(0);
function increment() {
setNumState(numState + 1);
}
function decrement() {
setNumState(numState - 1);
}
return (
<div>
<p>{numState}</p>
<button onClick={() => {
increment()
}}>增加
</button>
<button onClick={() => {
decrement()
}}>减少
</button>
</div>
)
}
function About() {
const [numState, setNumState] = useState(0);
function increment() {
setNumState(numState + 1);
}
function decrement() {
setNumState(numState - 1);
}
return (
<div>
<p>{numState}</p>
<button onClick={() => {
increment()
}}>增加
</button>
<button onClick={() => {
decrement()
}}>减少
</button>
</div>
)
}
export default function App() {
return (
<div>
<Home/>
<About/>
</div>
)
}
注意点:
- 不同组件中的 useState 保存的状态是相互独立的, 是相互不影响的
通过对如上示例的观察可以发现,出现了需要重复的业务逻辑代码,那么在我们使用了 useReducer 之后就会发现大大的优化了。
useReducer 接收的参数:
- 第一个参数: 处理数据的函数
- 第二个参数: 保存的默认值
useReducer 返回值,会返回一个数组, 这个数组中有两个元素:
- 第一个元素: 保存的数据
- 第二个元素: dispatch 函数
import React, {useReducer} from 'react';
function reducer(state, action) {
switch (action.type) {
case 'ADD':
return {...state, num: state.num + 1};
case 'SUB':
return {...state, num: state.num - 1};
default:
return state;
}
}
function Home() {
const [state, dispatch] = useReducer(reducer, {num: 0});
return (
<div>
<p>{state.num}</p>
<button onClick={() => {
dispatch({type: 'ADD'})
}}>增加
</button>
<button onClick={() => {
dispatch({type: 'SUB'})
}}>减少
</button>
</div>
)
}
function About() {
const [state, dispatch] = useReducer(reducer, {num: 0});
return (
<div>
<p>{state.num}</p>
<button onClick={() => {
dispatch({type: 'ADD'})
}}>增加
</button>
<button onClick={() => {
dispatch({type: 'SUB'})
}}>减少
</button>
</div>
)
}
export default function App() {
return (
<div>
<Home/>
<About/>
</div>
)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具