dispatch的扩展

总设计

一个dispatch的触发之路

1. 解析action

dispatch.xxx(),xxx就是action的type,同时会根据dispatch的配置(dispatch.config),解析dispatch的执行时机(这里请参考"执行时机配置"文档)

2. 判断执行时机

执行时机有延迟、防抖、节流、异步挂起,针对后边三种,有些action会被忽律掉,详细信息同样请参考"执行时机配置"文档

3. 通过“执行时机“判断的,进入执行队列

先进先出,顺序执行,以保证每次最多只有一个action正在执行,来保证redux概念上的"时间旅行"功能

4. 进入一层层middleware

这里middleware是参考koa带来的洋葱概念,详细信息请参考Middleware文档

5. 进入最终的修改操作

这里的修改操作包含effect和内置固化的reducer(update、delete、clear、merge、push等等)

和dva的effect的概念不太一样,sotract的effect并非纯粹用来处理副作用的,这里可以把一个effect看成一系列dispatch的组合而成的一个async方法。比如说一个effect可能是若干个dispatch.XXX的集成处理

effect同样也是可以互相调用的,effect的调用方式和reducer相同,例如一个effect叫insertTwice,那么调用就是dispatch.insertTwice(args),args则是这个effect

详细信息请参考Effect文档

Last updated

Was this helpful?