在一个 NgRx 中组合效果
combine effects in one NgRx
我也有类似的效果,想合二为一不知道怎么做
这是我的效果(我需要传递不同的 id
取决于动作类型):
setTopics$ = createEffect(
() => this.actions$.pipe(
ofType(setTopics),
map((action) =>
this.service.set(action.payload.id))),
{ dispatch: false });
setHeadlines$ = createEffect(
() => this.actions$.pipe(
ofType(setHeadlines),
map((action) =>
this.service.set(`ldb:${action.payload.id}:0`))),
{ dispatch: false });
我尝试像 ofType(setTopics,setHeadlines)
一样在 ofType
中组合操作,但是如何在 this.service.set()
中传递不同的 ID
非常感谢您的帮助!
这可以通过两种方式实现
- 如果您想让效果保持通用以仅设置它接收到的内容,set headlines 操作可以将负载中的
ldb:<id>:0
设置为标签,而 setTopics 负载会将标签设置为与 id 相同(或者如果您不这样做在 setTopics 中不需要标签,您可以检查标签是否有效,然后使用标签 else id )
- 如果你不关心它是否通用,你可以这样做
if (action.type === actionsType.ACTION1) {
value = action.payload.id
} else if (action.type === actionsType.ACTION2) {
value = `ldb:${action.payload.id}:0`
}
this.service.set(`ldb:${action.payload.id}:0`)
我也有类似的效果,想合二为一不知道怎么做
这是我的效果(我需要传递不同的 id
取决于动作类型):
setTopics$ = createEffect(
() => this.actions$.pipe(
ofType(setTopics),
map((action) =>
this.service.set(action.payload.id))),
{ dispatch: false });
setHeadlines$ = createEffect(
() => this.actions$.pipe(
ofType(setHeadlines),
map((action) =>
this.service.set(`ldb:${action.payload.id}:0`))),
{ dispatch: false });
我尝试像 ofType(setTopics,setHeadlines)
一样在 ofType
中组合操作,但是如何在 this.service.set()
非常感谢您的帮助!
这可以通过两种方式实现
- 如果您想让效果保持通用以仅设置它接收到的内容,set headlines 操作可以将负载中的
ldb:<id>:0
设置为标签,而 setTopics 负载会将标签设置为与 id 相同(或者如果您不这样做在 setTopics 中不需要标签,您可以检查标签是否有效,然后使用标签 else id ) - 如果你不关心它是否通用,你可以这样做
if (action.type === actionsType.ACTION1) {
value = action.payload.id
} else if (action.type === actionsType.ACTION2) {
value = `ldb:${action.payload.id}:0`
}
this.service.set(`ldb:${action.payload.id}:0`)