在 React Hooks 中从 useState 迁移到 useReducer

React Hooks 是 React 16.8 中最受欢迎的新功能。它使开发人员能够在不编写类的情况下使用状态和其他 React 功能,从而使组件更加简洁和可读。useState 和 useReducer 是两种主要的状态管理机制,本篇文章将重点介绍如何从 useState 迁移到 useReducer。

useState vs useReducer

useState 使我们可以在函数组件中使用本地状态。我们调用它并传递一个初始状态,它返回一个包含当前状态值和一个更新该状态值的函数。例如:

“`

const [count, setCount] = useState(0);

“`

useReducer 提供了更多的控制,可以将复杂的状态逻辑传递给 reducer 函数,它接受当前状态和 action,根据 action 的类型返回一个新的状态。例如:

“`

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};

default:

throw new Error();

}

}

const [state, dispatch] = useReducer(reducer, initialState);

“`

为何使用 useReducer?

使用 useReducer 的好处是,在组件中使用更多的状态时,它更适合处理更复杂的逻辑。尤其是在有多个相关变量需要计算和更新的情况下。

此外,虽然 useState 允许您使用多个用关闭的状态变量,但这会导致代码变得复杂,并且您需要跟踪每个变量的状态。用 useReducer 您可以将所有这些关联事件收集到一个单独的 reducer 函数中,并且得到一个彼此相关的状况集合。

从 useState 迁移到 useReducer

接下来,让我们看看如何将代码从 useState 迁移到 useReducer。

步骤1:定义 reducer

首先定义纯函数,根据当前状态和执行操作进行计算的分派函数。

“`

function reducer(state, action) {

switch (action.type) {

case ‘increment’:

return {count: state.count + 1};

case ‘decrement’:

return {count: state.count – 1};

default:

throw new Error();

}

}

“`

步骤2:用 initialState 替换 useState

接下来在组件顶部设置初始状态和使用 useReducer,代码如下:

“`

const initialState = {count: 0};

const [state, dispatch] = useReducer(reducer, initialState);

“`

步骤3:使用 dispatch 更新状态

最后使用 dispatch 函数而不是 setCount 来更新状态。

“`

// 显示计数

{state.count}

“`

=end=

详情参考

了解更多有趣的事情:https://blog.ds3783.com/