欢迎指导与讨论:)

  前言

    本文不涉及深入的知识,只是在概念层面和一个简单的例子解释redux-observable的工作原理。

    redux-observable,是redux的一个中间件库。它能够自动响应我们所dispatch的actions并执行对应的函数,让我们把复杂的异步函数分离到一些Epic的函数里面。因此不再需要react-thunk来让redux支持所谓的异步action了,同时让代码耦合度降得更低。redux-observable让redux的action更加纯净,都是干净的对象字面量 —— redux-observable适合大型复杂的状态管理,而且让代码分离度和可维护度更高。但可能需要先掌握RxJS的基本概念和api用法。

  

  几个概念

    可观察流与自动响应、redux的dispatch、Epics函数、redux-observable的内部原理。

    可观察流与自动响应

      可观察流相当于一个发射器,它能够随时间地流逝不断 发送/产生 各种各样的值,当我们监听这个发射器时,就会收到发射过来的值并可以执行我们想要的操作。而启动这个监听,需要触发 .subscribe( ) 。每当有一个新值发送时,subscribe里的代码就会自动执行 —— 自动响应。

// 一个简单的例子

发射器.subscribe( function( 收到的值 ){// 根据值可以进行一些函数操作
})

    

    redux的dispatch( action )

      redux的dispatch(action)函数能够根据action类型的不同,让应用的状态store响应它的变化。每当dispatch一个action时,应用状态可能就会更变。

// 下面代码触发时,应用状态会被刷新

dispatch({ type: 'man' })

    

    Epics函数

      redux-observable里的Epics函数主要作用是:1. 传进一个action,然后return一个新的、不一样的action。2. 这个Epics函数是一个发射器,因此我们能够subscribe它,从而可以监听并收到新的action。3. 每当我们调用redux的dispatch的时候,所有的Epics函数都会执行。

function (action$: Observable<Action>, store: Store): Observable<Action>;

    

    redux-observable的内部原理

       ( 1 ) 每当我们使用redux的dispatch的时候,每个Epics函数都会收到我们所dispatch的action,然后Epics函数返回一个新的action。

      (2)监听Epics函数,将它返回的新的action,用来dispatch,从而更新应用状态

// 用代码表示就是

epic(actions$).subscribe( function( ){dispatch( newAction ) // dispatch新的action
}) 

    

   一个简单的例子

// 定义两个action creator// 1. 拉取某用户数据
const fetchUser = username => ({ type: '拉取某用户数据', target: username });
// 2. 拉取完成
const fetchUserDone = data => ({ type: '拉取完成', data});// 定义一个Epics函数
const fetchEpics = action$ => action$.ofType('拉取某用户数据') // 如果true则进行下一步否则退出.mergeMap( action => // 提取action.target并进行ajax请求ajax.getJson(`/api/users/${action.target}`).map(function( data ){fetchUserDone ( data )// 调用拉取完成函数,返回{ type: '拉取完成', data }
                 }));             

    从上面的这个例子我们看到:

    (1)不再有异步action,即类型为函数的这种action,redux的action都是纯净的对象字面量了。

    (2)拉取数据的函数写到了Epics函数里面

    (3)Epics函数会对action的类型进行判断,满足不了不会继续执行

    (4)注:上面的mergeMap、ajax、map这几个都是RxJS的api。

  总结

    redux-observable的优点大概有这几个,欢迎补充。(1)会自动响应redux的dispatch,每当触发时都会执行我们定义的Epics函数。(2)把拉取数据等等的业务逻辑代码可以分离到Epics函数里面,降低代码耦合度,提升维护度(3)action都是纯净的对象字面量,不再需要引入redux-thunk。

    

转载于:https://www.cnblogs.com/BestMePeng/p/redux_observable.html

redux-observable笔记相关推荐

  1. Redux 学习笔记

    1:首先安装redux: npm install --save redux 2:引入redux : import { createStore } from 'redux'; //首先创建执行函数,Re ...

  2. redux学习笔记归纳

    设计思想: (1)Web 应用是一个状态机,视图与状态是一一对应的. (2)所有的状态,保存在一个对象里面. 核心源码: 基本概念:  1.Store:就是保存数据的地方,你可以把它看成一个容器.整个 ...

  3. redux rxjs_可观察的RxJS和Redux入门指南

    redux rxjs Redux-Observable is an RxJS-based middleware for Redux that allows developers to work wit ...

  4. redux 局部刷新_如何使用Redux Observables和刷新令牌API获取新的访问令牌

    redux 局部刷新 by Sachin Kumar 由Sachin Kumar 如何使用Redux Observables和刷新令牌API获取新的访问令牌 (How to get a new acc ...

  5. React+Redux技术栈核心要点解析(中篇)

    感谢作者郭永峰的授权发布. 作者:郭永峰,前端架构师,现用友网络 FED团队负责人,目前主要负责企业级应用前端技术平台建设工作,在前端工程化实现.Node 应用开发.React技术.移动开发等方向有丰 ...

  6. React + Redux

    相当长一段时间以来,我一直在React和Redux中实现应用程序.在过去的几年里,我写了两本关于它的电子书,并发布了学习React及其生态系统的课程平台.课程平台甚至内置在React和Redux中.我 ...

  7. 2019 年 React 学习路线图

    作者 | javinpaul 译者 | 无明 之前我们已经介绍了 2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框架,在 Facebook 的支持下,近年来实现了飞越式的发 ...

  8. 初学redux笔记,及一个最简单的redux实例

    categories: 笔记 tags: react redux 前端框架 把初学redux的一些笔记写了下来 分享一个入学redux很合适的demo, 用redux实现计数器 这是从阮一峰老师git ...

  9. Redux 进阶 - react 全家桶学习笔记(二)

    注:这篇是17年1月的文章,搬运自本人 blog... https://github.com/BuptStEve/... 零.前言 在上一篇中介绍了 Redux 的各项基础 api.接着一步一步地介绍 ...

  10. React学习笔记——redux里中间件Middleware的运行机理

    1.前言 上篇文章中,我们详细介绍了redux的相关知识和如何使用,最后使用中间件Middleware来帮助我们完成异步操作,如下图 上面是很典型的一次 redux 的数据流的过程,在增加了 midd ...

最新文章

  1. iOS 获取Assets中的启动页
  2. matlab批量修改txt内容_MATLAB作图实例:18:为饼图添加文本标签和百分比
  3. 洞察设计模式的底层逻辑
  4. 3月12日见!红魔5G游戏手机正式官宣:全球首款144Hz游戏手机
  5. 假设linux分配给u盘设备名是,嵌入式linux开发基础试卷-应用物理A答案
  6. php fpm 日志级别,Php 错误日志级别
  7. Hololens Vuforia 物体识别
  8. vertica常用sql语句总结
  9. excel 比对多列数据
  10. 数据库课程设计:图书借阅管理系统(控制台交互)
  11. 饮茶而思其源,中国茶叶之起源
  12. 预算少怎么做ASO优化?
  13. androidStudio开发安卓APP的五种框架布局界面设计
  14. VISIO画出占满页面的PDF矢量图
  15. 烽火推系统源码,抖音矩阵系统源码,look look 。
  16. mysql中select使用方法,MySQL中select语句介绍及使用示例
  17. 初探 MVP(Model View Presenter) 设计模式
  18. matlab解决相遇追及问题,猎犬追狐狸试题中追击时间问题的严格求解.doc
  19. Uni-app的Dcloud市场插件总结使用(一)下拉模糊查询
  20. 微盟“删库”144小时:痛的不是股价,是信任

热门文章

  1. Asp.net MVC 示例项目Suteki.Shop分析之---Model和Service
  2. Convert、Parse、TryParse、(int)等区别(细节小记)
  3. 利用js代码引入其他js文件到页面中
  4. 获取GridView中RowCommand的当前索引行
  5. java基础—统计一个字符串中各个字符出现的次数
  6. Mr.J--验证码登陆模块
  7. Docker 存储 网络
  8. Elasticsearch 6.3.2 安装 search-guard
  9. .NET采集数据,放入数据库总结
  10. Linux下执行.sh文件