Ali*_*lin 7 typescript ngrx ngrx-effects angular
如果我在我的app模块中声明,我试着理解ngrx中的typeof效果是如何工作的:
....
@NgModule({
imports: [
EffectsModule.forRoot([TodosEffectsService])
],
....
Run Code Online (Sandbox Code Playgroud)
我写效果文件肯定:
@Effect() createTodos$ = this.actions$
.ofType(CREATE_TASK)
.map(() => {
console.log('called');
return { type: 'OTHER'};
});
@Effect() addTodos$ = this.actions$
.ofType(CREATE_TASK)
.map(() => {
console.log('called');
return { type: 'OTHER'};
});
Run Code Online (Sandbox Code Playgroud)
我试着理解,现在在运行时我调度一个动作this.action $订阅并且每次执行ofType以匹配类型?orType一旦执行!?
如果它调用了一次,当我发出动作时,效果如何知道每次做出订阅/执行的效果?
谢谢大家!
Ser*_*aev 13
简而言之,当.ofType()被调用时,它会订阅源操作流并将匹配操作推送到结果流.所以它确实被称为一次.
如果我们查看源代码,我们将看到引擎盖下ofType使用库的filter运算符rxjs,这意味着this.action$.ofType(CREATE_TASK)可以扩展到
this.action$.filter(action => action.type === CREATE_TASK)
Run Code Online (Sandbox Code Playgroud)
如何filter从rxjs 文档中找到作品的说明:
与众所周知的
Array.prototype.filter方法类似,此运算符从源Observable获取值,将它们传递给predicate函数,并仅发出那些产生的值true.
值得注意的是,每个效果都将一个observable(this.action$)作为输入,并返回一个新的observable,只有在初始化效果时才会订阅一次.返回的observable定义了输入observable的动作如何被转换的方式,但它不会影响源observable本身.
在您的示例ofType()方法中,返回一个新的observable,它"侦听" this.action$observable并仅发出满足条件的动作action.type === CREATE_TASK.然后去map运算符,它还返回一个新的observable,它"监听" ofType()调用返回的observable,并根据你传递的投影函数将它接收的每个动作转换为一个新值.但是所有这些可观察对象在初始化时只创建一次,当你发送动作时,它们只是"流过"可观察对象,被过滤和转换.
您可能还想更熟悉rxjs.我建议你查看AndréStaltz的"你将学习RxJS"的演讲,它应该让你直观地知道观察是什么以及它们是如何工作的.
| 归档时间: |
|
| 查看次数: |
6284 次 |
| 最近记录: |