我是ngrx/store和effect的新手,所以我仍然不理解调度操作的流程:
- 动作->效果->减速器->存储
- 动作->减速器->效果->减速器->store
我的问题是,当我调用store.select()
时,我发现该操作被调度了两次,这就是我为测试所做的:
还原器功能
switch (action.type) {
...
default: {
console.log('In reducer function');
return state;
}
}
效果类构造函数
constructor( private action$: Actions ) {
console.log('in effect constructor');
}
这就是我在控制台中得到的
In reducer function
in effect constructor
In reducer function
尝试不仅登录reducer一条消息,还登录action.type
,然后您可以看到它有两个不同的操作:store init
和effects init
。
当您调度一个action
时,它首先进入effects
,然后进入reducer
,reducer
可以更新相关的state
。
通常,人们调度一个加载操作,它在一个效果中被处理,效果加载数据并返回一个带有有效负载的成功操作,然后reducer接收成功操作并将有效负载设置为其状态。