redux-saga

redux-saga

中文文档地址:https://redux-saga-in-chinese.js.org/

  • 纯净
  • 强大
  • 灵活

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvT9Nm0u-1610100030495)(assets/2019-08-27-09-35-12.png)]

在saga任务中,如果yield了一个普通数据,saga不作任何处理,仅仅将数据传递给yield表达式(把得到的数据放到next的参数中),因此,在saga中,yield一个普通数据没什么意义。

saga需要你在yield后面放上一些合适的saga指令(saga effects),如果放的是指令,saga中间件会根据不同的指令进行特殊处理,以控制整个任务的流程。

每个指令本质上就是一个函数,该函数调用后,会返回一个指令对象,saga会接收到该指令对象,进行各种处理

一旦saga任务完成(生成器函数运行完成),则saga中间件一定结束

指令前面必须使用yield,以确保该指令的返回结果被saga控制

  • take指令:【阻塞】监听某个action,如果action发生了,则会进行下一步处理,take指令仅监听一次。yield得到的是完整的action对象
  • all指令:【阻塞】该函数传入一个数组,数组中放入生成器,saga会等待所有的生成器全部完成后才会进一步处理
  • takeEvery指令:不断的监听某个action,当某个action到达之后,运行一个函数。takeEvery永远不会结束当前的生成器
  • delay指令:【阻塞】阻塞指定的毫秒数
  • put指令:用于重新触发action,相当于dispatch一个action
  • call指令:【可能阻塞】用于副作用(通常是异步)函数调用
  • apply指令:【可能阻塞】用于副作用(通常是异步)函数调用
  • select指令:用于得到当前仓库中的数据
  • cps指令:【可能阻塞】用于调用那些传统的回调方式的异步函数
  • fork:用于开启一个新的任务,该任务不会阻塞,该函数需要传递一个生成器函数,fork返回了一个对象,类型为Task
  • cancel:用于取消一个或多个任务,实际上,取消的实现原理,是利用generator.return。cancel可以不传递参数,如果不传递参数,则取消当前任务线。
  • takeLastest:功能和takeEvery一致,只不过,会自动取消掉之前开启的任务
  • cancelled:判断当前任务线是否被取消掉了
  • race:【阻塞】竞赛,可以传递多个指令,当其中任何一个指令结束后,会直接结束,与Promise.race类似。返回的结果,是最先完成的指令结果。并且,该函数会自动取消其他的任务
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值