javascript 如何在ngrx/data中为操作编写效果?

bksxznpy  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(140)

我在一个使用ngrx的项目中工作,也使用ngrx的其他库和包,如ngrx/entity或ngrx/data。

  • 有时 * 我需要 * 在 * 某些动作中 * 创建效果属于 *(就被分派而言)到ngrx/data。

我发现一些困难的地方是调度其他动作,这些动作强烈依赖于由ngrx/data以自动方式调度的其他动作,甚至是由我自己(自定义)调度的其他动作,如下所示
...

@Injectable()
    export class FooEffects {

        fooSelected$ = createEffect(() =>
            this.actions$
                .pipe(
                    ofType(FooActions.fooSelected),
                    map((action) => this.entityActionFactory.create<Foo>('Foo', EntityOp.QUERY_LOAD),
                  ))
);
       ...

        constructor(private actions$: Actions, private entityActionFactory: EntityActionFactory) { }

    }

...
那么,我如何监听ngrx/data中的Action,如QUERY_LOAD,常见的get/all或其他任何内容,以实现新效果的创建?是否存在类似于

fooNgrxDataEffectForQueryLoad$ = createEffect(() =>
            this.actions$
                .pipe(
                    ofType(('Foo', EntityOp.QUERY_LOAD)),

或者换一种方式问,如何在ngrx/data中为“NATIVE”操作编写效果?
我知道创建ngrx/data是为了尽可能地摆脱Actions,Selectors,Effects,Reducers,因此具有更少的样板文件。但是,应该有一种方法可以从ngrx/data创建效果。
非常感谢。

ego6inou

ego6inou1#

你的例子中的是一种可能的方法。
你应该监听ngrx/data类型的操作,并导致你需要的东西。ngrx/data是相当原始的,有a lot of limitations
他们推荐的是to extend base classes and to change behavior there添加新的动作/效果/还原器等。
如果您能提供一个示例来说明如何更改流,那就太好了。

u5rb5r59

u5rb5r592#

您可以使用ofEntityTypeofEntityOp管道操作符来为NgRx数据操作写入效果。在上面的例子中,你可以说:

fooNgrxDataEffectForQueryLoad$ = createEffect(() =>
            this.actions$
                .pipe(
                    ofEntityType('Foo'),
                    ofEntityOp(EntityOp.QUERY_LOAD)),

看起来OP在这篇文章中也回答了他自己的问题:https://betterprogramming.pub/write-effects-for-actions-in-ngrx-data-214c93869758

相关问题