美文网首页
redux中间件

redux中间件

作者: 中间件 | 来源:发表于2019-01-07 20:01 被阅读0次

前言

提到中间件,你可能会想到Express和Koa等服务端框架,没想到也没关系,这句话是我装逼用的。

那么redux中的中间件到底干嘛用的?

有这样一个问题?我们之前用的Redux都是在Action发出之后立即执行Reducer,计算出state,这是同步操作。如果想异步操作呢?即过一段时间再执行Reducer怎么办?这里就需要用到中间件middleware。

先放一张图看看:

一、中间件的概念

redux是有流程的,那么,我们该把这个异步操作放在哪个环节比较合适呢?

Reducer?纯函数只承担计算State功能,不适合其它功能。

View?与State一一对应,可以看做是State的视觉层,也不适合承担其它功能。

Action?它是一个对象,即存储动作的载体,只能被操作。

其实,也只有dispatch能胜任此重任了。那么怎么在dispatch中添加其它操作呢?

示例中可以看出,我们对store.dispatch重新进行了定义,在发送action的前后,做了打印。

这是中间件的大致雏形,真实的中间件要比这么复杂多了

二、中间件的用法

我们在这里先看看中间件是怎么使用,下面我们一步步剖析每个细节。

代码中有两点需要注意:

1、createStore方法可以整个应用的初始状态作为参数 内部是这么处理的

let state = inital_state;

2、中间件的参数次序有讲究。下面我会把这个问题讲明白。

三、applyMiddleware

Middleware可以让你包装store的dispatch方法来达到你想要的目的。同时,middleWare还拥有“可组合”这一关键特性。多个middleWare可以被组合到一起使用,形成middleWare链,依次执行。其中每个middleware不需要关心链前后的的middleWare的任何信息。

上面代码中,所有中间件都被放进了一个数组chain,然后嵌套执行,最后执行store.dispatch。中间件内部middlewaAPI可以拿到getState和dispatch这两个方法。

...middleware:遵循Redux middleware API的函数。每个middleware接受Store的dispatch和getState函数作为命名参数,并返回一个函数。该函数会被传入成为next的下一个middleWare 的dispatch方法,并返回一个接收action的新函数,这个函数可以直接调用next(action),或者在其他需要的时刻调用,甚至根本不去调用它。

所以,接下来,我们就能看到middleware的函数签名是({ getState, dispatch }) => next => action

其实,它的本质就是包装sotre中的dispatch。

上面代码中,还用到了compose方法,我们来看看compose是怎么是实现的?

compose

先看下面一个栗子:

这中写法调用起来,一层套一层,是不是看着很不爽,我们简化一下:

看看这个代码是不是用起来,很干练一些。其实还可以简化

至于为什么applyMiddleWare的参数有顺序,这里给出了答案。

四、Applymiddleware的三个常用参数

1、日志记录

使用 Redux 的一个益处就是它让 state 的变化过程变的可预知和透明。每当一个 action 发起完成后,新的 state 就会被计算并保存下来。State 不能被自身修改,只能由特定的 action 引起变化。

试想一下,当我们的应用中每一个 action 被发起以及每次新的 state 被计算完成时都将它们记录下来,岂不是很好?当程序出现问题时,我们可以通过查阅日志找出是哪个 action 导致了 state 不正确。

需要上述资料的加QQ群 514683544  免费领取哟~

相关文章

  • react 面试

    react redux (所有数据都放入redux管理) 1、redux中间件原理(middleware) 中间件...

  • 2-Redux中间件

    Redux 中间件 [toc] Redux 中间件的作用 Reudx 中的中间件是通过对 dispatch 进行的...

  • Redux 中间件源码清源

    网上的Redux中间件原理解释多有疏漏,譬如我在多篇blog上看到Redux中间件解释以及Redux中间件深入浅出...

  • Day17. Redux深入

    如何使用redux-thunk 中间件的使用, redux-thunk redux-devtools redux开...

  • [源码] Redux React-Redux01

    redux中间件洋葱模型imageimage redux中间件注意点image 导航 [深入01] 执行上下文[h...

  • react技术栈

    关于 Redux 中间件 Redux 的中间件是定义一个函数,对 dispatch 进行改造,在发出 action...

  • Redux-saga

    Redux-saga 概述 redux-saga是一个用于管理redux应用异步操作的中间件,redux-saga...

  • react项目中引入redux+react-router的一些写

    Redux + react-router 关于redux中间件的理解https://zhuanlan.zhihu....

  • redux

    使用步骤 redux只处理同步 redux处理异步请求中间件· 在引入redux的时候引入applyMiddlew...

  • redux源码解读

    Redux API 总览 浅谈redux 中间件的原理 原文 在 Redux 的源码目录 src/,我们可以看到如...

网友评论

      本文标题:redux中间件

      本文链接:https://www.haomeiwen.com/subject/zpcprqtx.html