问题标签 [ngrx-effects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
418 浏览

angular - 依赖于其他效果结果的连锁效果

我有一个bag和的商店favorites。目前有一个行动REMOVE_FROM_BAG。这会触发一个副作用,即从您的包中移除该项目的 API,该 API 调度REMOVE_FROM_BAG_COMPLETE实际上将其从商店中移除。

我们正在添加一个动作,MOVE_FROM_BAG_TO_FAVORITES它将删除一个项目bag并将其放入favorites. 如果删除 API 调用失败,则不应继续执行任何其他操作。整体流程将是:

因此,如果 Api 调用失败,则不应从包存储中删除该项目或将其添加到您的收藏夹列表中。

至于将项目移动到收藏夹,我也可以将其REMOVE_FROM_BAG作为副作用触发,但我不确定如何确定副作用是否成功(即链接它)。

理论上这应该可行,但我不确定如何防止在由于 API 调用失败而失败ADD_TO_FAVORITES的情况下被调度。REMOVE_FROM_BAG有没有更好的方法来链接具有副作用的操作?

0 投票
1 回答
9711 浏览

angular - ngrx 效果给出类型'void'不可分配给类型'ObservableInput'

上面的代码给了我“(有效载荷:任何)=> void”类型的参数不能分配给“(值:任何,索引:数字)=> ObservableInput”类型的参数。类型“void”不可分配给类型“ObservableInput”。错误可能在哪里。我遵循了https://github.com/ngrx/effects/blob/master/docs/intro.md上的 ngrx 效果官方介绍。

0 投票
2 回答
297 浏览

angular - 如何在ngrx/effects中创建局部效果

我怎样才能在ngrx/effects中做这样的事情:

如何处理 userOptions 和 userInfo 操作的成功操作,然后重定向到仪表板页面?如果我在 user.SIGN_UP_SUCCESS 序列之外调度 userOptions.Add 和 userInfo.Add 操作,例如从其他页面,我不想重定向到仪表板页面。

回答

维克多·萨夫金。NgRx 的状态管理模式和最佳实践 https://www.youtube.com/watch?v=vX2vG0o-rpM

0 投票
4 回答
26225 浏览

angular - 如何在@ngrx/effects 中等待 2 个动作

可以影响像 Promise.all 这样的两个操作吗?例子:

更新 我想要实现的是与 Promise.all 类似的行为。如何并行调度两个效果,等到所有效果都解决后,再调度第三个动作。像https://redux-saga.js.org/docs/advanced/RunningTasksInParallel.html这样的东西有了承诺,这很明显:

在ngrx/effects中可能吗?还是ngrx / effects中的错误方式?

回答

您可以使用几个选项:

1) 不要使用通用动作。

遵循 Myke Ryan 演示中的这些规则:https ://youtu.be/JmnsEvoy-gY

优点:更容易调试

缺点:大量的样板和动作

2) 使用带有嵌套动作的复杂流。

检查这篇文章:https ://bertrandg.github.io/ngrx-effects-complex-stream-with-nested-actions/

这是两个操作的简单示例:

优点:你可以实现你想要的

缺点:复杂的流太复杂,无法支持 :) 看起来很丑,而且可能很快就会变成地狱,observables 在操作成功或失败之前不会取消订阅,这意味着理论上任何第三方操作都可以向这些 observables 发出信号。

3)使用聚合器模式。

查看 Victor Savkin 关于 NgRx 的状态管理模式和最佳实践的演讲:https: //www.youtube.com/watch? v=vX2vG0o-rpM

这是一个简单的例子:

首先,您需要使用相关 ID 参数创建操作。CorrelationId 应该是 uniq,例如它可能是一些 guid。您将在操作链中使用此 ID 来识别您的操作。

然后我们的效果:

优点:与第 2 点相同,但没有第三方操作。

缺点:与第 1 点和第 2 点相同

4) 不要对 API 使用效果。使用模拟效果但返回 Observable 的良好旧服务。

为您服务:

所以你可以在以后的任何地方组合它,比如:

5)使用ngxs:https ://github.com/ngxs/store

优点:样板更少,这感觉像是有棱角的东西,它增长很快

缺点:功能比ngrx少

0 投票
1 回答
1454 浏览

angular - Angular2 Ngrx 影响服务加载并点击两次我的服务

我尝试使用 Ngrx 效果服务,但它似乎达到了我的要求的两倍

我的派遣

效果服务:

我的服务

我的行动

我的减速机

我最终得到了两个 http 请求和 2 个响应!

感谢您的帮助

0 投票
1 回答
216 浏览

ngrx - 在这个@ngrx 效果示例中,reduce 函数做了什么?

在这个@ngrx 效果示例中,下一行中的reduce函数是做什么的?

不能newBooks用来代替newBookEntities吗?

0 投票
1 回答
124 浏览

angular - 在一个 NgEffects 中链接两个服务器调用

我正在使用ngrx,但我不知道如何在一个ngEffect 中链接两个服务器调用。你知道怎么做吗?我需要你的帮助。

在此行为中,第一个呼叫被中断,仅处理第二个呼叫

编辑

减速机功能

和调度动作

编辑

0 投票
2 回答
770 浏览

angular - @ngrx/store 没有正确订阅选择

我使用@ngrx/store、@ngrx/efffects 创建了以下 Angular 2 应用程序

好的,所以这些行似乎有问题:

this.persons$ = store.select((state: State) => state.persons);

当我mainStoreReducer{}选择中使用时似乎无法正常工作。但是,如果我这样做,StoreModule.provideStore(mainStoreReducer)那么它会奇迹般地工作!显然我不能只这样做,因为那只是一个减速器,所以在一个正常的项目中我会有多个。

任何人都知道出了什么问题。喜欢的请直接看github项目https://github.com/cgeo7/ngrx_tests_websockets_spring-boot 正常构建。

编辑:我已经进行了这些修改,但我看到问题是状态在层次结构的第一级具有减速器对象,它包含实际状态。此外,如果我添加第二个减速器,它永远不会像mainStoreReducer. 这里有问题

在此处输入图像描述

0 投票
1 回答
100 浏览

ngrx - 为什么在这个@ngrx 效果示例中需要收集缩减器?

@ngrx 效果示例中使用了四个化简器,即 (1) 书籍 (2) 集合 (3) 布局和 (4) 搜索。我不明白为什么collection这里需要减速器,因为books减速器已经反映了addorremove操作后集合的状态。我只看到使用collection减速器来跟踪loadingloaded状态。

查看正在创建的书籍的最终状态getBookCollection。在getBookEntities任何添加或删除后反映集合的状态,因此不必与collection减速器组合。

我在这里错过任何逻辑吗?

0 投票
1 回答
944 浏览

angular - 在模型中加载数据的最佳方法,Angular 2

以下是关于我的项目的一些信息:

  1. 我正在获取帖子数据用户@ngrx商店和效果。
  2. 帖子模型有userId
  3. 当我渲染帖子时,我不想显示post.datapost.user.name

有没有办法通过帖子急切加载用户数据?

这个问题的最佳解决方案是什么?


post.model看起来是这样的:

我没有得到带有帖子项目的整个用户对象。我只得到用户ID。


编辑:这就是我获取和呈现帖子的方式:

后期效果.ts

post.component.ts

post.component.html


编辑2:发布reducer文件内容

post.reducer.ts