当前位置: 首页 > news >正文

React@16.x(57)Redux@4.x(6)- 实现 bindActionCreators

目录

  • 1,分析
    • 1,直接传入函数
    • 2,传入对象
  • 2,实现

1,分析

一般情况下,action 并不是一个写死的对象,而是通过函数来获取。

bindActionCreators 的作用:为了更方便的使用创建 action 的函数 actionCreator

举例:

1,直接传入函数

const createAddUserAction = (user) => ({type: ADD_USER,payload: user,
});store.dispatch(createAddUserAction({ id: 3, name: "name3", age: 20 }));

相当于

const addUser = bindActionCreators(createAddUserAction, store.dispatch);
addUser({ id: 3, name: "name3", age: 20 });

2,传入对象

const actions = {addUser: createAddUserAction,updateUser: createUpdateUserAction,deleteUser: createDeleteUserAction,
};store.dispatch(actions.addUser({ id: 3, name: "name3", age: 20 }));
store.dispatch(actions.updateUser(2, { name: "name22" }));
store.dispatch(actions.deleteUser(1));

相当于

const bindAction = bindActionCreators(actions, store.dispatch);
bindAction.addUser({ id: 3, name: "name3", age: 20 });
bindAction.updateUser(2, { name: "name22" });
bindAction.deleteUser(1);

2,实现

export const bindActionCreators = (actionCreators, dispatch) => {if (typeof actionCreators === "function") {return getAutoDispatchActionCreator(actionCreators, dispatch);} else if (typeof actionCreators === "object") {const res = {};for (const key in actionCreators) {if (Object.hasOwnProperty.call(actionCreators, key)) {const ac = actionCreators[key];if (typeof ac === "function") {res[key] = getAutoDispatchActionCreator(ac, dispatch);}}}return res;} else {throw TypeError("actionCreators 必须是函数或对象");}
};function getAutoDispatchActionCreator(actionCreator, dispatch) {return function (...args) {dispatch(actionCreator(...args));};
}

以上。

http://www.lryc.cn/news/401224.html

相关文章:

  • 【深度学习入门篇 ⑦】PyTorch池化层
  • 【Pytorch】数据集的加载和处理(一)
  • 论文翻译:Explainability for Large Language Models: A Survey
  • 38 IRF+链路聚合+ACL+NAT组网架构
  • 【昇思学习打卡营打卡-第二十八天】MindNLP ChatGLM-6B StreamChat
  • 前端打包部署后源码安全问题总结
  • 扩展你的App:Xcode中App Extensions的深度指南
  • 【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(下)
  • Solus Linux简介
  • 常见的排序算法,复杂度
  • 鸿蒙特色物联网实训室
  • JVM垃圾回收-----垃圾分类
  • 前端基础之JavaScript学习——变量、数据类型、类型转换
  • SQL常用数据过滤---IN操作符
  • HDFS和FDFS
  • Flutter对接FlutterBugly 报错Zone mismatch
  • Docker缩小镜像体积与搭建LNMP架构
  • 六边形动态特效404单页HTML源码
  • BGP路径属性
  • 从零开始学量化~Ptrade使用教程(六)——盘后定价交易、港股通与债券通用质押式回购
  • Docker 三剑客
  • 每天一个数据分析题(四百三十一)- 卡方检验
  • Flowable-流程图标与流程演示
  • MyBatis源码中的设计模式2
  • AI发展中的伦理挑战与应对策略
  • 基于用户非兴趣/非偏好/非习惯的推荐
  • Abaqus基于CT断层扫描的三维重建插件CT2Model 3D
  • Mindspore框架CycleGAN模型实现图像风格迁移|(三)损失函数计算
  • ENSP中VLAN的设置
  • 《后端程序员 · Nacos 常见配置 · 第一弹》