NgRx中createEffect返回值的使用方式解析
NgRx createEffect 返回值用途与生效逻辑说明
你贴的是Angular NgRx状态管理中标准的Effect写法,关于返回值的规则分两层说明:
1. createEffect 方法本身的返回值
- 它返回的是被NgRx Effects运行时托管的Observable实例,你把它赋值给类属性
fetchData$之后,只要在模块的EffectsModule.forRoot/forFeature()里注册了这个Effect类,框架会在应用初始化时自动订阅这个流,不需要手动调用.subscribe()。 - 这个返回值不需要你主动操作,生效逻辑完全由框架管控:模块销毁时框架会自动取消订阅,避免内存泄漏。
2. Effect内部数据流的返回值
你代码里exhaustMap回调中return的actions.FETCH_LIVE_DATA_ACTION()是数据流内部的输出值,规则如下:
- 你这段代码没有给
createEffect传第二个配置参数,默认开启dispatch: true模式:流里吐出的所有值,NgRx都会自动识别为Action并执行派发,不需要你手动调用this.store.dispatch()。
这段代码的实际运行逻辑:全局监听
FETCH_DATA_ACTION的派发,触发后通过exhaustMap屏蔽同一时间重复触发的同类型Action,最终自动派发FETCH_LIVE_DATA_ACTION,触发后续对应的Reducer或其他Effect逻辑。
- 额外提一句:你代码里
map(action => action.payload)这行是冗余代码,因为后续exhaustMap的入参actionPayload没有被使用,删掉这行也不影响逻辑运行。 - 如果你的Effect不需要派发新Action(比如只做日志埋点、页面跳转这类纯副作用操作),需要手动给
createEffect传入第二个配置{dispatch: false},此时流里的返回值不会被当作Action处理。 - 你在
exhaustMap里直接返回Action对象的写法是合法的,NgRx会自动将其包装为Observable输出,等价于显式写return of(actions.FETCH_LIVE_DATA_ACTION())。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

