redux-saga学习笔记

本文详细介绍了redux-saga,一个用于处理redux应用中副作用的库。通过中间件接口,redux-saga允许对异步流程进行精确控制,如暂停、停止和启动。它利用generator函数,简化了异步操作的测试,并保持action的纯净性。文章讲解了redux中间件的概念,以及如何使用redux-saga进行监听和响应action,还提到了常用副作用函数如take、call、put和select。
摘要由CSDN通过智能技术生成

redux-saga是什么?

在redux的学习中,我们知道,redux中的reducer函数一定是一个纯函数,即该函数不随全局改变,也不改变全局状态。然后当redux需要处理一些带有副作用的异步任务时,redux采用中间件改造 dispatch ,从而诞生了一批通过构造满足特殊 pattern 条件的 action 来解决副作用的问题。
而redux-saga是另一种非常强大处理副作用的工具。它提供了对异步流程更细粒度的控制,对每个异步流程他可以实现暂停、停止、启动三种状态。此外redux-saga利用了generator,对每个saga,其测试方式可以非常简单。更重要的是其异步处理逻辑放在了saga中,我们可以监听action触发,然后产生副作用。action依然是普通的redux action,不破坏redux对action的定义。

从redux中间件接口说起

虽然redux-saga是利用了generator生成器来实现一步方法的处理,但是原理上它和redux-thuk一样借用了redux的中间件接口来改造dispatch函数。所以先解释redux的中间件接口。redux的核心是控制和管理所有的数据输入输出,因此有了dispatch,由于dispatch是一个很纯的纯函数,就是单纯的派发action来更改数据,其功能简单且固定。而如果这时候需要对所有action统一添加记录日志的功能,那么最简单的就是在每个dispatch调用前添加一个日志输出代码,如下

console.log('dispatching', action);
dispatch(action)

如果此时程序中有很多的dispatch,我们就需要添加很多的重复代码,虽然编辑器提供批量替换,但这无疑是产生了很多样板代码。因为所有的需求都是和dispatch息息相关,我们只需要更改dispatch函数,把dispatch进行一层封装,然后将日志记录放进去就好了。如下:

let next = store.dispatch
store.dispatch = function dispatchAndLog(action) {
   
  console.log('dispatching', action
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值