Angular中Ngrx Effects在状态更新后是否会重复触发?
问题解答
核心结论
这个Effect不会因为SearchAction更新searchParams状态而被触发,自然也不会产生无限循环。
具体原因
- 这个Effect的触发条件是仅当
pageLimitChangedAction被派发时才会启动执行流程,触发源是actions$.pipe(ofType(pageLimitChangedAction)),状态searchParams的变化本身不会触发这个Effect。 concatLatestFrom(() => [this.store.select(selectSearchParams)])的作用是:在每次pageLimitChangedAction到来时,一次性获取当前时刻的searchParams状态值,而不是持续监听该状态的变化。它只是当前Effect执行流程中的一个步骤,用来获取必要的状态数据,不会因为后续状态更新而重新触发整个Effect。
流程拆解
- 当派发
pageLimitChangedAction,Effect启动。 - 通过
concatLatestFrom获取当前的searchParams状态。 - 生成新的
searchParams并派发SearchAction。 SearchAction的reducer更新searchParams状态,但此时因为没有新的pageLimitChangedAction被派发,这个Effect不会再次执行。
只有当再次派发pageLimitChangedAction时,整个流程才会重新走一遍,完全不存在无限循环的触发条件。
内容的提问来源于stack exchange,提问作者Adi Fuchs
相关产品推荐
相关产品推荐

