这个 hook 可以让我们用类似 redux 用 reducer、action、dispatch 操作 state。
useReducer 适合较复杂的 state,因为我们可以将状态的改变统一放在 reducer 去做管理,像 useState 的状态改变就会分散在不同的函式里面。
useState 的底层其实是用 useReducer 实践的
const [state, dispatch] = useReducer(reducer, initialState, initStateFn);
因此初始化 state 可以在第二个参数做初始化,或是独立写一个会 return 初始化 state 的函式,放到第三个参数。
dispatch 不会随着 rerender 而重新分配记忆体位置,在作为 props 传入到 child component 中时也可以不用担心没有 useMemo 而造成 re-render 的问题
import React, { useReducer } from "react";
// 初始化 state
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case "increment":
return { count: state.count + 1 };
case "decrement":
return { count: state.count - 1 };
case "reset":
return { count: (state.count = 0) };
default:
return { count: state.count };
}
}
export default function App() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
Count: {state.count}
<br />
<br />
<button onClick={() => dispatch({ type: "increment" })}>Increment</button>
<button onClick={() => dispatch({ type: "decrement" })}>Decrement</button>
<button onClick={() => dispatch({ type: "reset" })}>Reset</button>
</div>
);
}
本篇范例程序在以下连结:
>>: [NestJS 带你飞!] DAY05 - Module
谈到资安,一定绕不开常听到的安全协定SSL、TLS,透过安全协定建立起的连线,在交换资料时保证通讯双...
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
若市场总是有效率,我就是在街上乞讨的流浪汉。 I'd be a bum on the street ...
开发Android需要经历些什麽样的心酸?...不是说iOS开发不会有心酸事,一想到「天线门」、「T...
What is Colly? Colly是一种Golang的网路爬虫工具,而网路爬虫Web Craw...