【react】---手动封装一个简易版的redux

export let createStore = (reducer)=>{
//定义默认的state
let state;
//定义默认的action
let actionTypes = "@@redux/INIT"+Math.random();
let initAction = {type:actionTypes}
//将所以需要监听的函数放在这个里面
let listeners = []
//定义getState函数
let getState = ()=>state;
//定义事件订阅函数
let subscribe = (cb)=>{
listeners.push(cb);
}
//定义事件派发函数 用来调用action
let dispatch = (action=initAction)=>{
//调用reducer获取新的state
state = reducer(state,action);
//遍历所以需要监听的函数
listeners.map((cb)=>{
cb();
})
}
dispatch();
return {
getState,
dispatch,
subscribe
}
}
【react】---手动封装一个简易版的redux的更多相关文章
- 【react】---手动封装一个简易版的redux---【巷子】
export let createStore = (reducer)=>{ //定义默认的state let state = {}; //定义默认的action let actionTypes ...
- 手动实现一个简易版SpringMvc
版权声明:本篇博客大部分代码引用于公众号:java团长,我只是在作者基础上稍微修改一些内容,内容仅供学习与参考 前言:目前mvc框架经过大浪淘沙,由最初的struts1到struts2,到目前的主流框 ...
- 封装一个简易版的ajax操作对象
/** * 发送ajax请求 * @type {Object} * 使用方法如下: * $ajax.request( * method: "post", //请求方式 * url: ...
- 使用 js 和 Beacon API 实现一个简易版的前端埋点监控 npm 包
使用 js 和 Beacon API 实现一个简易版的前端埋点监控 npm 包 前端监控,埋点,数据收集,性能监控 Beacon API https://caniuse.com/beacon 优点,请 ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- 如何实现一个简易版的 Spring - 如何实现 Constructor 注入
前言 本文是「如何实现一个简易版的 Spring」系列的第二篇,在 第一篇 介绍了如何实现一个基于 XML 的简单 Setter 注入,这篇来看看要如何去实现一个简单的 Constructor 注入功 ...
- 如何实现一个简易版的 Spring - 如何实现 @Component 注解
前言 前面两篇文章(如何实现一个简易版的 Spring - 如何实现 Setter 注入.如何实现一个简易版的 Spring - 如何实现 Constructor 注入)介绍的都是基于 XML 配置文 ...
- 如何实现一个简易版的 Spring - 如何实现 @Autowired 注解
前言 本文是 如何实现一个简易版的 Spring 系列第四篇,在 上篇 介绍了 @Component 注解的实现,这篇再来看看在使用 Spring 框架开发中常用的 @Autowired 注入要如何实 ...
- 如何实现一个简易版的 Spring - 如何实现 AOP(上)
前言 本文是「如何实现一个简易版的 Spring 系列」的第五篇,在之前介绍了 Spring 中的核心技术之一 IoC,从这篇开始我们再来看看 Spring 的另一个重要的技术--AOP.用过 Spr ...
随机推荐
- JAVA学习笔记(4)—— 排序算法
排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ...
- stat 文件三个时间点
Linux文件3个时间点(access time,modify time,change time) access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间. 注意:至于为什么会出现 ...
- Asp.net Mvc 与WebForm 混合开发
根据项目实际需求,有时候会想在项目中实现Asp.net Mvc与Webform 混合开发,比如前台框架用MVC,后台框架用WebForm.其实要是实现也很简单,如下: (1)在MVC 中使用Web ...
- selenium启动报错“ incorrect JSON status mapping for 'unknown error' (500 expected)”
前面讲了工程启动报错“selenium启动报错Unable to read VR Path Registry from C:\Users\clinva\AppData\Local\openvr\ope ...
- 大前端服务器渲染 发布和部署 Vue + vue(SSR)
https://blog.csdn.net/sinat_15951543/article/details/80109521 就是到服务器dist 下面 npm run start & 然 ...
- 【java】java基本用法记录
java用法总结 计时 long startTime = System.nanoTime(); solution.process(inputFile); long endTime = System.n ...
- md5加密 bas64加密
/** * 获取bas64加密的算法 * @param str * @return */ public static String getBase64(String str) { byte[] b = ...
- Linux-SFTP/SSH免密码,钥匙登录
1.原理 登录的客户端要有私钥,被登录的服务器要保存客户端生成的公钥. 2.修改服务器/etc/ssh/sshd_config设置,如下: sudo vi /etc/ssh/sshd_config P ...
- css属性之统一设置文本及div之间的对齐方式
设为 Flex 布局以后,子元素的float.clear和vertical-align属性将失效.hdp-uf{ display: -webkit-box; /* 老版本语法: Safari, iOS ...
- ***ThinkPHP中的常用方法汇总总结:M方法,D方法,U方法,I方法
thinkPHP中M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法 ...