useReducer二次封装,解决hooks组件里useState声明过多代码阅读性差的问题

react里hooks变量声明的数量太多 容易导致代码可读性差,

组件通信,需要一对一传递的数据不整洁

本文针对以上情况对useReducer进行二次封装,实现在hooks 组件内 像在class 组件内类似的变量声明办法,当做一个工具使用,

--需要下载loadsh插件 或者自行导入深拷贝的办法,用来快速重置数据的初始状态

--有业务需要的同学,可以结合redux 进行修改,,来实现当前数据或者历史数据的缓存达到撤回的目的

import { useReducer} from 'react';
//需要下载lodash插件,或者自行导入深拷贝的方法,用于快捷重置数据的初始状态
import _ from 'lodash';
const App = (props) => {
  //记录数据用来回到初始化状态
  let __props__ = _.cloneDeep(props);

  const [store, dispatch] = useReducer((state, action) => {
    try {
      return { ...state, ...action };
    } catch (error) {
      console.error(error);
      return { ...state };
    }
  }, props);
  const _dispatch = (action, fun) => {
    dispatch(action);
      fun && fun({ ...store, ...action }, store);
  };
  return [
    store,
    _dispatch,
    {
      clearState: () => {
        dispatch(__props__);
      },
    },
  ];
};
export default App;

 

使用方法

import { useReducer } from '@/components';
const App = () => {
  const [state, setState, operation] = useReducer({ count: 1, name: '张三' });
  const { name } = state;
  return (
    <div>
      <button
        onClick={() => {
          setState({ count: state.count + 1 }, (state, lastState) => {
            console.log(state); //state=>是最新的数据状态
            console.log(lastState); //lastState=>更新前的数据状态
          });
        }}
      >
        count++
      </button>
      <p>count:{state.count}</p>
      <p> name:{name}</p>
      <p>
        <button onClick={operation.clearState}>重置</button>
      </p>
    </div>
  );
};
export default App;

以上是在产品中遇到的需求,简单写了一下 分享出来,如果那个不太合理,,欢迎同学们批评指正,,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值