1.定义

中间件就是一个函数,对store.dispatch方法进行了改造,在发出 Action 和执行 Reducer 这两步之间,添加了其他功能。

2.举例 日志中间件

import { applyMiddleware, createStore } from 'redux';
import createLogger from 'redux-logger';
const logger = createLogger();const store = createStore(reducer,applyMiddleware(logger)
);

在这里,redux-logger提供一个生成器createLogger,可以生成日志中间件logger。然后,将它放在applyMiddleware方法之中,传入createStore方法,就完成了store.dispatch()的功能增强。

3.applyMiddlewares()方法

applyMiddlewares()是 Redux 的原生方法,作用是将所有中间件组成一个数组,依次执行。

4.异步操作的思路

1.同步操作只要发出一种 Action 即可,异步操作的差别是它要发出三种 Action。分别是操作发起,操作成功,操作失败

以抓取数据为例,共有两种写法

// 写法一:名称相同,参数不同
{ type: 'FETCH_POSTS' }
{ type: 'FETCH_POSTS', status: 'error', error: 'Oops' }
{ type: 'FETCH_POSTS', status: 'success', response: { ... } }// 写法二:名称不同
{ type: 'FETCH_POSTS_REQUEST' }
{ type: 'FETCH_POSTS_FAILURE', error: 'Oops' }
{ type: 'FETCH_POSTS_SUCCESS', response: { ... } }

异步操作的思路

  • 操作开始时,送出一个 Action,触发 State 更新为"正在操作"状态,View 重新渲染
  • 操作结束后,再送出一个 Action,触发 State 更新为"操作结束"状态,View 再一次重新渲染

5 redux-thunk 中间件

操作结束自动发出一个action 加载成功后(componentDidMount方法),它送出了(dispatch方法)一个 Action,向服务器要求数据 fetchPosts(selectedSubreddit)。这里的fetchPosts就是 Action Creator。fetchPosts是一个Action Creator(动作生成器),返回一个函数。这个函数执行后,先发出一个Action(requestPosts(postTitle)),然后进行异步操作。拿到结果后,先将结果转成 JSON 格式,然后再发出一个 Action( receivePosts(postTitle, json)。返回的是对象而不是函数,就要使用中间件redux-thunk

异步操作的第一种解决方案就是,写出一个返回函数的 Action Creator,然后使用redux-thunk中间件改造store.dispatch

6.redux-promise中间件。

另一种异步操作的解决方案,就是让 Action Creator 返回一个 Promise 对象。这就需要使用redux-promise中间件。这个中间件使得store.dispatch方法可以接受 Promise 对象作为参数。这时,Action Creator 有两种写法。具体因为不常用不介绍。

转载于:https://www.cnblogs.com/lyxverycool/articles/6548541.html

redux中间件的用法相关推荐

  1. redux中间件原理-讲义

    1.redux中间件简介 1.1.什么是redux中间件 redux 提供了类似后端 Express 的中间件概念,本质的目的是提供第三方插件的模式,自定义拦截 action -> reduce ...

  2. redux中间件之redux-thunk

    redux的核心概念其实很简单:将需要修改的state都存入到store里,发起一个action用来描述发生了什么,用reducers描述action如何改变state tree .创建store的时 ...

  3. Redux中间件(redux-thunk、redux-promise、redux-saga)

    文章目录 1.redux中间件简介 1.1.什么是redux中间件 1.2.使用redux中间件 2.中间件的运行机制 2.1.createStore源码分析 2.2.applyMiddleware源 ...

  4. Redux中间件——Redux-thunk

    什么是thunk? Redux-thunk是作为redux的middleware存在的,thunk是函数编程界的一个专有名词,主要用于calculation delay,也就是延迟计算. functi ...

  5. Koa2和Redux中间件源码研究

    一.Koa2中间件源码分析 在Koa2中,中间件被存放在一个数组中. 使用koa中,最常见的就是app.use(fn),use函数部分源码如下所示.首先中间件必须是个函数.若是generator函数, ...

  6. Express中app.use中间件的用法-匹配所有的请求方式

    场景 Node的Web应用框架Express的简介与搭建HelloWorld: Node的Web应用框架Express的简介与搭建HelloWorld_霸道流氓气质的博客-CSDN博客 Express ...

  7. redux引用多个中间件_如何轻松创建您的第一个Redux中间件

    redux引用多个中间件 by Gabriele Cimato 加布里埃莱·西马托(Gabriele Cimato) 如何轻松创建您的第一个Redux中间件 (How to create your f ...

  8. redux中间件+react高阶组件

    1.redux中间件 中间件提供第三方插件的模式,自定义拦截 action -> reducer 的过程.变为 action -> middlewares -> reducer.这种 ...

  9. redux异步action_React躬行记(12)——Redux中间件

    Redux的中间件(Middleware)遵循了即插即用的设计思想,出现在Action到达Reducer之前(如图10所示)的位置.中间件是一个固定模式的独立函数,当把多个中间件像管道那样串联在一起时 ...

最新文章

  1. 变量与字符串的连接 - format、格式化字符串
  2. springmvc学习(小知识点整理)
  3. documentum中的Fulltext search的文章收集
  4. 使用TCP来进行数据通信
  5. (一)prometheus与grafana介绍与安装
  6. 使用Terraform创建托管版Kubernetes
  7. Temp文件夹缺少network service权限,webservice能访问,但是不能调用
  8. 基于HTML5的WebGL实现的2D3D迷宫小游戏
  9. mysql开发与运维_专业的MySQL开发规范
  10. Cesium: 如何将倾斜摄影数据转换为3dTiles格式
  11. 第19课:生活中的访问模式——一千个读者一千个哈姆雷特
  12. java joda time_Java使用JodaTime处理时间
  13. 解决CTeX工具包中MikTeX编译TeX文件报错问题
  14. 服务器一直即将注销你的登录,win10系统提示即将注销你的登录如何解决
  15. IOS7 隐藏状态栏 (电池栏)
  16. mysql修改密码报错:Your password does not satisfy the current policy requirements
  17. 当代年轻人下班行为报告:我下班了,却又没完全下班
  18. 2021国赛A题第三问 - 点关于三维直线的对称点 - 入射光的反射向量
  19. 最近压力大?一波毒鸡汤帮你调整回来
  20. stm32定时器与定时器中断

热门文章

  1. thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法
  2. java 获取六个月账期,应收帐龄分析里面账期分析能不能改为0-30天?
  3. Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
  4. 盘点15个不起眼但非常强大的 Vim 命令
  5. 汇总jQuery的61种选择器及示例
  6. JS关闭浏览器 (不弹出提示框)
  7. java Math 方法
  8. 微信公共平台接口开发--Java实现
  9. git pull 报错:The following untracked working tree files would be overwritten by merge
  10. 【SQL语句】MySql、SqlServer查询近期记录