React Hooks — useReducer

82 阅读1分钟

useReducer 是 React中的高级 hooks 之一,它用来存储和更新 state,接收当前应用的 state 以及触发的动作 action,并返回最新的 state。(相当于 useState 的升级版,简单场景使用 useState 即可,useReducer 一般在状态逻辑比较复杂、或者多个组件需要进行逻辑共享的时候使用)

image.png

参数

useReducer 参数:

  • reducer 函数,返回一个新的 state
  • state 初始化的值

useReducer 返回值:

  • 当前的 state
  • dispatch 函数,更新state,组件会进行重新渲染

image.png

代码实现

下面以一个计数器的实现为例,左右两个按钮分别进行 num 值的增加和减少。

引入 useReducer 后,使用 reducer 来维护 num 的值的变化,初始值为 0,点击按钮后,执行 dispatch 方法,改变数据的值,并重新渲染组件

import { useReducer } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'add':
      return state + 1;
    case 'dec':
      return state - 1;
    default:
      //
  }
}

function myFunc() {
  const [num, dispatch] = useReducer(reducer, 0);

  return (
    <div>
      <button onClick={() => dispatch({ type: 'dec' })}>-</button>
      <span>{num}</span>
      <button onClick={() => dispatch({ type: 'add' })}>+</button>
    </div>
  )
}