• react的hook之useReducer


    import React, { useState, memo, useMemo, useCallback, useReducer, useContext } from 'react';
    import ReactDOM from 'react-dom';
    
    
    
    export function Three() {
      let initialState = 0;
      // 如果你希望初始状态是一个{number:0}
      // 可以在第三个参数中传递一个这样的函数 ()=>({number:initialState})
      // 这个函数是一个惰性初始化函数,可以用来进行复杂的计算,然后返回最终的 initialState
    
    
      const init = (initialState) => {
        return {
          number: initialState
        };
      }
    
      const reducer = (state, action) => {
        debugger
        switch (action.type) {
          case 'increment':
            return { number: state.number + 1 };
          case 'decrement':
            return { number: state.number - 1 };
          default:
            throw new Error();
        }
      };
    
      const [state, dispatch] = useReducer(reducer, initialState, init);
      return (
        <>
          Count: {state.number}
          <button onClick={() => dispatch({ type: 'increment' })}>+</button>
          <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
        </>
      )
    
    }

    下面和上面一样,只是参数改了下形式,对比看下

    import React, { useState, memo, useMemo, useCallback, useReducer, useContext } from 'react';
    import ReactDOM from 'react-dom';
    
    
    
    export function Three() {
      let initialState = { number: 0 };
      // 如果你希望初始状态是一个{number:0}
      // 可以在第三个参数中传递一个这样的函数 ()=>({number:initialState})
      // 这个函数是一个惰性初始化函数,可以用来进行复杂的计算,然后返回最终的 initialState
    
    
    
      const reducer = (state, action) => {
        //debugger
        switch (action.type) {
          case 'increment':
            return { number: state.number + 1 };
          case 'decrement':
            return { number: state.number - 1 };
          default:
            throw new Error();
        }
      };
    
      const [state, dispatch] = useReducer(reducer, initialState);
      return (
        <>
          Count: {state.number}
          <button onClick={() => dispatch({ type: 'increment' })}>+</button>
          <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
        </>
      )
    
    }

     总结:

    第一个参数是(state, action) => newState 的 reducer,第二个参数是state的值

    reducer里面的action就是底下dispatch的参数,state就是initialState的值

     有点类似于vue3.0的ref,reactive,一个是简单数据结构的state,一个是声明复杂数据结构的state

    还可以参考https://www.jianshu.com/p/14e429e29798

  • 相关阅读:
    MySQL5.7 容器化安装
    什么是架构?——软件系统架构的定义
    服务端高并发分布式架构演进之路(转)
    CentOS7 增加回环地址
    三句话看明白jdk收费吗
    【转载】C#里怎么把string类型转换成double
    【转载】如何查看自己网站的搜索引擎收录量和索引量
    【转载】c# datatable 判断值是否存在
    【转载】C#中Datatable修改列名
    【转载】C#使用typeof运算符获取对象变量的具体类型Type
  • 原文地址:https://www.cnblogs.com/lsc-boke/p/15035700.html
Copyright © 2020-2023  润新知