首页 > 其他分享 >react项目--redux封装

react项目--redux封装

时间:2022-11-14 14:34:32浏览次数:65  
标签:handleNum -- newState react num action actionNames redux type

 index.ts

1 const store = { 2 state: { 3 num: 20, 4 }, 5 actions: { 6 // 放同步的代码 7 add1(newState: { num: number }, action: { type: string }) { 8 // redux 异步写法有问题 9 // setTimeout(() => { 10 // newState.num++; 11 // }, 500); 12 newState.num++; 13 }, 14 add2(newState: { num: number }, action: { type: string; value: number }) { 15 newState.num += action.value; 16 }, 17 add3(newState: { num: number }, action: { type: string; value: number }) { 18 newState.num += action.value; 19 }, 20 }, 21 // 优化redux-thunk的异步写法 (模仿vuex) 22 asyncActions: { 23 asyncAdd1(dispatch: Function) { 24 setTimeout(() => { 25 dispatch({ type: "add1" }); 26 }, 1000); 27 }, 28 }, 29 30 // 1 初始写法 31 // add1: "add1", 32 // add2: "add2", 33 // 2 名字同一管理 34 // actionNames: { 35 // add1: "add1", 36 // add2: "add2", 37 // }, 38 // 3 优化 39 actionNames: {}, 40 }; 41 // 我们现在想做到actionNames自动生成。不用我每一次添加一个方法, 42 // 都要在actionNames手动添加键值对,这样很麻烦。 43 44 let actionNames = {}; 45 /** 46 * actionNames有多少个键值对,取决于actions里有多少个函数, 47 * 遍历store.actions,给actionNames添加键值对 48 */ 49 for (let key in store.actions) { 50 actionNames[key] = key; 51 } 52 store.actionNames = actionNames; 53 54 export default store; 55 // 封装的目的:最终是有利于我们的开发或者维护 56 // 封装的思路是:将来开发的时候只需要把数据写和方法写入到这个 57 // 状态文件中,例如:XxxxStatus/index.ts,而不需要再去操作其 58 // 他的文件。(我们往这个方向去封装)
reducer.ts:

import handleNum from "./index"; // 管理数据 // const defaultState = { // // num: 20, // // num: Numstatus.state.num // 数据一多要写很多次 // ...handleNum.state // 解构的写法 // }; let reducer = ( state = { ...handleNum.state }, // 直接解构 action: { type: string; value: number } ) => { // 调用dispatch就会执行这里的代码 // console.log("初始化执行了reducer...."); // 深度复制 let newState = JSON.parse(JSON.stringify(state)); // switch的做法是拿action.type和case后面的每一个值进行对比,进行遍历 // 把case后面的值做成对象,actionsNames // 1 原始写法 // switch (action.type) { // case handleNum.add1: // handleNum.actions[handleNum.add1](newState,action) // break; // case handleNum.add2: // handleNum.actions[handleNum.add2](newState,action) // break; // default: // break; // } // 2 [优化],上面的写法,我们在每添加一个方法,都要多写一个case // 拿action.type和actionsNames每一个项进行对比,如果相等,就调用 // 模块名 actions[下标](newState,action) for (let key in handleNum.actionNames) { // key 是每一个键 // 判断是否相等 // if (action.type === "add1") { if (action.type === handleNum.actionNames[key]) { handleNum.actions[handleNum.actionNames[key]](newState, action); break; } } // 好处:每一次写一个方法,都不需要手动添加case return newState; }; export default reducer;

  

标签:handleNum,--,newState,react,num,action,actionNames,redux,type
From: https://www.cnblogs.com/guangf/p/16888955.html

相关文章

  • Linux系统编程·环境变量
    你好,我是安然无虞。文章目录​​自学网站​​​​基本概念​​​​常见环境变量​​​​相关命令​​​​获取环境变量​​​​环境变量·全局属性​​自学网站推荐给老铁......
  • Nginx(概念,安装/升级,配置解析,SSL的安装)
    目录:1.1nginx与apache差异1.2应用场景 2.1编译安装nginx2.2升级nginx2.3添加nginx系统服务 3.nginx配置文件3.2访问状态统计配置 4.1基于授权的访问控制4.2......
  • Linux系统编程·进程创建及终止
    你好,我是安然无虞。文章目录​​自学网站​​​​进程创建​​​​fork函数​​​​写时拷贝​​​​进程终止​​​​进程退出场景​​​​练习题​​自学网站推荐给老铁......
  • No thread-bound request found异常
    问题本文主要研究下springmvc的Nothread-boundrequestfound异常:java.util.concurrent.CompletionException:java.lang.IllegalStateException:Nothread-bound......
  • 谈到App加固,裕信银行选择顶象
    移动互联网时代,App已经成为了商业银行触达和经营客户的主要阵地。尤其,在疫情爆发之后,银行App作为重要的「无接触」门户,开始扮演越来越重要角色。此外,随着新一代人工智能......
  • Linux系统编程·进程概念
    你好,我是安然无虞。文章目录​​自学网站​​​​上文回顾​​​​进程控制块—PCB​​​​查看进程​​​​初识系统调用​​​​初始fork函数​​​​练习题​​自学网站......
  • SELinux
    1.SELinux基本架构与原理 SELinux是典型的MAC-MandatoryAccessControls实现,对系统中每个对象都生成一个安全上下文(SecurityContext),每一个对象访问系统的资源都......
  • python-时间模块-3大常见时间处理模块-datatime(八)
    1.datatime模块datetime是python中处理日期时间的标准库,datetime模块中常用的类包括date,time,datetime,timedelta,使用这些对象支持日期时间的数学运算和更有效的解析......
  • Linux系统编程·进程地址空间
    你好,我是安然无虞。文章目录​​自学网站​​​​三个验证​​​​虚拟地址引入​​​​进程地址空间​​​​练习题​​自学网站推荐给老铁们两款学习网站:面试利器&算法......
  • 自动化层次总结
      一、接口自动化应用框架:python+request+pytest+allure   testcase目录:用例目录一个模块创建一个目录每个目录中一个py文件和若干yaml文件py文件中一般......