如何使用Thunk 函数实现中间件处理数据

前言


因为研究redux源码,所以学习了redux源码使用Thunk 函数实现中间件处理数据,并写了个小demo和理解

demo代码


//中间件1
function fun1(dispatch) {
        return function(num) {
            console.log('fun1:---前', num);
            console.log('dispatch--1: ', dispatch);
            dispatch(num);
            console.log('fun1:---后', num);
        }
    }
//中间件2
function fun2(dispatch) {
        return function(num) {
            console.log('fun2:---前', num);
            console.log('dispatch--2: ', dispatch);
            dispatch(num)
            console.log('fun2:---后', num);
        }
    }

function compose(...funcs) {
  if (funcs.length === 0) {
    return arg => arg
  }

  if (funcs.length === 1) {
    return funcs[0]
  }

  return funcs.reduce((a, b) => (...args) => a(b(...args)))
}

var num = compose(fun1,fun2)(function(num) { console.log(num) });

num(456)

运行结果


运行结果

个人理解


1、 var num = compose(fun1,fun2)(function(num) { console.log(num) });
function(num) { console.log(num) }作为参数传给fun2,然后返回的function作为参数返回给fun1,fun1返回的function赋值给num

2、num(456)
456作为参数传给fun1返回的function,然后fun1 中的dispatch(num);会将456传给fun2返回的function,fun2中的dispatch(num)相当于执行function(num) { console.log(num) },从而实现fun1,fun2中间件处理数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,384评论 2 17
  • 1. require 在使用Objective-C类之前需要调用require('className’): req...
    深藏不露的zack阅读 5,167评论 0 0
  • 一、什么情况需要redux? 1、用户的使用方式复杂 2、不同身份的用户有不同的使用方式(比如普通用户和管...
    初晨的笔记阅读 6,225评论 0 11
  • js简介 Js是一种基于事件和对象驱动的解释性、松散性的语言。 一切皆对象 javascript 布兰登艾奇 ...
    塔库纳玛哈哈阅读 4,960评论 0 2
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,375评论 1 10