redux-saga
By admin
自从了解generator开始,就对这个语法很反感。一个英文教程上有个形容词是mind-bending,╮(╯_╰)╭看来不光我一个人这么认为。
一定要运行的时候还总需要while(true) 或for来搭配,使其带来的那点同步的好处被抵消殆尽。
saga让人用generator语法,可看了一下源码发现里面一个generator语法也没用,一个this没有,全程函数编程,真是高了!
能明显感觉出的好处是当有多个并发,其中一个成功或失败的情况下其余不需要的可以自动cancel。
看到一篇文章对redux-saga源码的分析,最后一张图神解释
同样的还有菊叔漫画里的,如何画小米,哈哈。
于是拿来教育年轻小伙,网上的零碎视频,散教程,大概也就能带你到第四步。要真正掌握什么,还是得老老实实看官方文档。
下面将一下我对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通常都是页面载入后就都开始监听的,稍微有点不效率。