本文翻译自: https://medium.freecodecamp.c... 首发于: 处理异步利器 -- Redux-saga (众成翻译)

作者:行魏可知
链接:https://zhuanlan.zhihu.com/p/...
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

几天前,我和同事谈了谈如何管理Redux异步操作。虽然他用了很多插件来扩展Redux,但还是让他对 Javascript 产生疲劳症。

我们来看看是什么情况:如果你习惯于根据你的需要而不是根据技术身所带来的价值,来使用技术为你工作,那么搭建React生态系统是非常烦人和浪费时间的。

过去两年,我参与了一些Angular项目,并且爱上了 MVC(Model-View-Controller) 开发模式。有一点我不得不说,对于Backbone.js出身的我来说,学习Angular虽然很困难,但同时也非常值得。正因为如此,我找到了一份更好的工作,也有机会从事自己感兴趣的工作了。说真的,我从Angular社区学到了很多。

这些日子工作非常顺利,但是战斗还要继续,我也在尝试了新的框架: React, Redux 和 Sagas。

几年前,我偶然阅读了一篇Thomas Burleson的文章 -- Promise调用链扁平化,受益良多。两年前,我还经常想起其中很多极好的想法。

这些天我在往React迁移,我发现Redux非常强大,尤其是使用sagas来管理异步操作的时候深有感触。所以我就参考了Thosmas的文章,写下了这篇文章,用redu-saga实现了类似的方法。希望本文能给大家带来帮助,更好地理解学习redux-saga的重要性。

声明: 我也在另一个项目中做了类似的事情,希望在两个项目中都能引发大家讨论。本文中,我假设你已经对 Promise,React,Redux 等 Javascript 知识有了基本的了解。

首先

Redux-saga的作者 Yassine Elouafi 说:

redux-saga 是一个库,致力于在React/Redux应用中简化异步操作(side effects,即像异步获取远程数据或者浏览器缓存数据)。

Redux-saga 是基于 saga 和 ES6 生成器函数(Generator),辅助我们快速组织所有异步、分散的操作。如果你想要了解更多Saga模式本身,可以看看 Caitie McCaffrey 录制的视频;想了解更多关于Generators的知识,可以免费观看 Egghead 上的视频 (至少在本文发布的时候,视频是免费的)。

案例:飞行航班表

本文将用Redux-saga重现Thomas举的例子。代码最终放在 Github 上,并附上demo。

场景如下:

图片来自 Thomas Burleson

如你所见,上图中有三个API调用:getDeparture -> getFlight -> getForecast,所以我们的API服务设计如下:

class TravelServiceApi {
static getUser() {
return new Promise((resolve) => {

 setTimeout(() => {resolve({email : "somemockemail@email.com",repository: "http://github.com/username"});}, 3000);

});
}

static getDeparture(user) {
return new Promise((resolve) => {
setTimeout(() => {

resolve({userID : user.email,flightID : “AR1973”,date : “10/27/2016 16:00PM”});
}, 2500);

});
}

static getForecast(date) {
return new Promise((resolve) => {

  setTimeout(() => {resolve({date: date,forecast: "rain"});}, 2000);

});
}
}
这些API服务是模拟场景中的数据服务。首先,我们需要一个用户的信息,然后根据这个用户的信息去获取航班的起飞信息和天气预报,从而我们创建了多个数据面板如下:

继续阅读

处理异步利器 -- Redux-saga相关推荐

  1. 如何在React Native中使用Redux Saga监视网络更改

    by Pritish Vaidya 通过Pritish Vaidya 如何在React Native中使用Redux Saga监视网络更改 (How to monitor network change ...

  2. React native 项目进阶(redux, redux saga, redux logger)

    之前利用知乎日报的api写了react-native的一个入门项目,传送文章地址React Native 项目入门和源码地址RN入门项目源码,目前github上的代码已经在原文的基础上增加了新的功能, ...

  3. Redux异步解决方案之Redux-Thunk原理及源码解析

    前段时间,我们写了一篇Redux源码分析的文章,也分析了跟React连接的库React-Redux的源码实现.但是在Redux的生态中还有一个很重要的部分没有涉及到,那就是Redux的异步解决方案.本 ...

  4. redux中间件原理-讲义

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

  5. 一篇文章读懂 React and redux 前端开发 -DvaJS, a lightweight and elm-style framework.

    DvaJS: React and redux based, lightweight and elm-style framework. https://dvajs.com/ 实例项目源码:https:/ ...

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

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

  7. React + Redux

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

  8. 使用React,Redux,redux-sage构建图片库(翻译)

    看到这篇文章build an image gallery using redux saga,觉得写的不错,长短也适中. 文后有注释版的github代码库,请使用comment分枝. Flickr AP ...

  9. 生命周期函数、redux的使用(一)

    在定义React组件的时候,render()函数返回的html必须只有一个根元素,要想这个根元素不显示并且不占据页面空间,可以从react中引进Fragment组件 JSX语法细节 在JSX里面写注释 ...

最新文章

  1. 基于Kotlin实现的GankIo客户端
  2. 通过一个端口读取多个按钮
  3. 自学python清单-机器学习和Python怎样快速掌握?你一定需要这27张清单
  4. 需要掌握的数学知识(待补充)
  5. java支持接口吗_java – 支持专用接口方法
  6. Idea 创建简单的SpringBoot 父子项目
  7. Win2003远程桌面报错:RPC错误 解决办法
  8. tracepro杂散光分析例子_2020临中高考咨询群咨询成效问卷结果分析
  9. Badboy下载安装超详细教程
  10. 树莓派Zero的千兆测速
  11. python函数图像绘制、函数不固定_Python中函数图像快速绘制的方法
  12. 地图学的基础知识_天文坐标系_大地坐标系_地心坐标系及其相关概念
  13. 高等工程数学 —— 第四章 (1)线性方程组的直接解法与广义逆矩阵求解矛盾方程组
  14. bash: vi: command not found
  15. pop链 php,POP链
  16. 强化学习:Actor-Critic、SPG、DDPG、MADDPG
  17. Pthon.习题二 字符串的基本处理
  18. Scala List操作笔记 --备忘(9.9总结)
  19. 动态规划解二维多重背包问题
  20. 度小满笔试两道编程题2020/09/20

热门文章

  1. 互联网广告综述之点击率特征工程
  2. #DDBMS#构建一个简单的docker网络
  3. Debian 7(Wheezy)下配置Open×××
  4. 【超链接】ToMyStudy
  5. 利用RMAN检测数据库坏块的脚本
  6. vc 6.0常见编译错误及改正方法
  7. [linux]Linux挂载光盘,解压光盘内的tar安装包,并安装软件(Install VMware Tools in a Linux Guest)...
  8. 在 SharePoint2010 中使用 XML 查看器取得其他站点的内容列表
  9. Notification和Notification Manager的使用
  10. 企业级IT运维平台的发展趋势与规划要点