redux-saga

自从了解generator开始,就对这个语法很反感。一个英文教程上有个形容词是mind-bending,╮(╯_╰)╭看来不光我一个人这么认为。

一定要运行的时候还总需要while(true) 或for来搭配,使其带来的那点同步的好处被抵消殆尽。

saga让人用generator语法,可看了一下源码发现里面一个generator语法也没用,一个this没有,全程函数编程,真是高了!

能明显感觉出的好处是当有多个并发,其中一个成功或失败的情况下其余不需要的可以自动cancel。

看到一篇文章对redux-saga源码的分析,最后一张图神解释

e922670c26d28b9b910084e99d644

同样的还有菊叔漫画里的,如何画小米,哈哈。

于是拿来教育年轻小伙,网上的零碎视频,散教程,大概也就能带你到第四步。要真正掌握什么,还是得老老实实看官方文档。

下面将一下我对saga的源码的理解。

最开始先run,执行saga生成iterator,在proc中执行第一轮的next。

通过middleware监听所有redux的action,每当有action通过的时候multicastChannel查看所有taker,如果有匹配则执行该taker,taker中包含对下一轮next的回调。

由saga put的action会带SAGA_ACTION的标识立即执行,其他action会缓存执行。

在generator中通过take实现对事件的按需监听,是saga相对其他库实现事件机制的一大优势。举个例子,通常来说,在登录之前页面只需要监听LOGIN事件,肯定不会有LOGOUT发生,当LOGIN事件发生并成功后,LOGIN不再需要监听,这时再开始监听LOGOUT事件。在传统的页面编程中,LOGIN和LOGOUT通常都是页面载入后就都开始监听的,稍微有点不效率。

此条目发表在 未分类 分类目录。将固定链接加入收藏夹。