资讯专栏INFORMATION COLUMN

动手实现一个最简单的redux

xiguadada / 1984人阅读

摘要:原文地址的主要集中在函数返回值中,以下这个迷你的只简单实现方法,如下测试代码运行结果

原文地址:https://github.com/huruji/blog/issues/1

redux的主要API集中在createStore函数返回值中,以下这个迷你的redux只简单实现createStore、dispatch、subscribe、getState方法,如下:

const createStore = function(reducer, initialState){
  let currentState = undefined;
  if(initialState) {
    currentState = initialState;
  }
  let currentReducer = reducer;
  let listeners = [];
  return {
    getState() {
      return currentState;
    },
    dispatch(action) {
      if(!currentState){
        currentState = currentReducer(currentState, action);
      }
      currentState = currentReducer(currentState, action);
      listeners.forEach((item) => {
        item();
      });
      return this;
    },
    subscribe(fn) {
      listeners.push(fn);
    }
  }
};

测试代码:

let reducer = function(state, action) {
  if(!state) {
    return {counter: 0};
  }
  switch(action.type) {
    case "ADD":
      return {counter: state.counter+1};
    case "DEL":
      return {counter: state.counter-1};
    default:
      return state;
  }
};
let store = createStore(reducer);

store.subscribe(function(){
  console.log("before1")
});
store.subscribe(function() {
  console.log("before2")
});

store.dispatch({
  type:"ADD"
});
console.log(store.getState());
store.dispatch({
  type: "ADD"
});
console.log(store.getState());
store.dispatch({
  type: "DEL"
});
console.log(store.getState());

运行结果:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91435.html

相关文章

  • 写一本关于 React.js 小书

    摘要:因为工作中一直在使用,也一直以来想总结一下自己关于的一些知识经验。于是把一些想法慢慢整理书写下来,做成一本开源免费专业简单的入门级别的小书,提供给社区。本书的后续可能会做成视频版本,敬请期待。本作品采用署名禁止演绎国际许可协议进行许可 React.js 小书 本文作者:胡子大哈本文原文:React.js 小书 转载请注明出处,保留原文链接以及作者信息 在线阅读:http://huzi...

    Scorpion 评论0 收藏0
  • 动手实现 redux

    摘要:动手实现实现这个模块直接创建的函数考虑到要暴露出去的三个函数我们用函数内部的变量来存储我们的数据时候直接返回当前的值就可以了同样用内部变量来存储订阅者订阅者则由函数添加返回取消订阅的函数。则根据返回新的同时通知订阅者执行相关逻辑。 文章地址 实例回顾 showImg(https://segmentfault.com/img/bVXtft?w=640&h=320); 假如按钮和界面不在同...

    Barrior 评论0 收藏0
  • 前端空间 - 收藏集 - 掘金

    摘要:封装手写的方笔记使用检测文件前端掘金副标题可以做什么以及使用中会遇到的坑。目的是帮助人们用纯中文指南实现复选框中多选功能前端掘金作者缉熙简介是推出的一个天挑战。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金译者注:本文作者是著名 JavaScript BDD 测试框架 Chai.js 源码贡献者之一,Chai.js 中会遇到很多异常处理...

    you_De 评论0 收藏0
  • 前端空间 - 收藏集 - 掘金

    摘要:封装手写的方笔记使用检测文件前端掘金副标题可以做什么以及使用中会遇到的坑。目的是帮助人们用纯中文指南实现复选框中多选功能前端掘金作者缉熙简介是推出的一个天挑战。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金译者注:本文作者是著名 JavaScript BDD 测试框架 Chai.js 源码贡献者之一,Chai.js 中会遇到很多异常处理...

    lwx12525 评论0 收藏0
  • 面试题目别有洞天 -> 从es6优雅解法,到降级polyfill,再到redux reduce

    摘要:每次被执行时,和被传入,这个根据进行累加或者是自身消减,英文原意,进而返回最新的。 之前的一篇文章:从一道面试题,到我可能看了假源码讨论了bind方法的各种进阶Pollyfill,今天再分享一个有意思的题目。 从解这道题目出发,我会谈到数组的Reduce方法,ES6特性和Redux数据流框架中Reducer的命名等等。一道典型的题目,却如唐代诗人章碣《对月》诗中所云:别有洞天三十六,水...

    econi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<