问题标签 [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.
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
有没有更好的方法来链接具有副作用的操作?
angular - ngrx 效果给出类型'void'不可分配给类型'ObservableInput'
上面的代码给了我“(有效载荷:任何)=> void”类型的参数不能分配给“(值:任何,索引:数字)=> ObservableInput”类型的参数。类型“void”不可分配给类型“ObservableInput”。错误可能在哪里。我遵循了https://github.com/ngrx/effects/blob/master/docs/intro.md上的 ngrx 效果官方介绍。
angular - 如何在ngrx/effects中创建局部效果
我怎样才能在ngrx/effects中做这样的事情:
如何处理 userOptions 和 userInfo 操作的成功操作,然后重定向到仪表板页面?如果我在 user.SIGN_UP_SUCCESS 序列之外调度 userOptions.Add 和 userInfo.Add 操作,例如从其他页面,我不想重定向到仪表板页面。
回答
维克多·萨夫金。NgRx 的状态管理模式和最佳实践 https://www.youtube.com/watch?v=vX2vG0o-rpM
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少
angular - Angular2 Ngrx 影响服务加载并点击两次我的服务
我尝试使用 Ngrx 效果服务,但它似乎达到了我的要求的两倍
我的派遣
效果服务:
我的服务
我的行动
我的减速机
我最终得到了两个 http 请求和 2 个响应!
感谢您的帮助
ngrx - 在这个@ngrx 效果示例中,reduce 函数做了什么?
在这个@ngrx 效果示例中,下一行中的reduce
函数是做什么的?
不能newBooks
用来代替newBookEntities
吗?
angular - 在一个 NgEffects 中链接两个服务器调用
我正在使用ngrx,但我不知道如何在一个ngEffect 中链接两个服务器调用。你知道怎么做吗?我需要你的帮助。
在此行为中,第一个呼叫被中断,仅处理第二个呼叫
编辑
减速机功能
和调度动作
编辑
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
. 这里有问题
ngrx - 为什么在这个@ngrx 效果示例中需要收集缩减器?
@ngrx 效果示例中使用了四个化简器,即 (1) 书籍 (2) 集合 (3) 布局和 (4) 搜索。我不明白为什么collection
这里需要减速器,因为books
减速器已经反映了add
orremove
操作后集合的状态。我只看到使用collection
减速器来跟踪loading
和loaded
状态。
查看正在创建的书籍的最终状态getBookCollection
。在getBookEntities
任何添加或删除后反映集合的状态,因此不必与collection
减速器组合。
我在这里错过任何逻辑吗?
angular - 在模型中加载数据的最佳方法,Angular 2
以下是关于我的项目的一些信息:
- 我正在获取帖子数据用户@ngrx商店和效果。
- 帖子模型有
userId
。 - 当我渲染帖子时,我不想显示
post.data
和post.user.name
有没有办法通过帖子急切加载用户数据?
这个问题的最佳解决方案是什么?
post.model
看起来是这样的:
我没有得到带有帖子项目的整个用户对象。我只得到用户ID。
编辑:这就是我获取和呈现帖子的方式:
后期效果.ts
post.component.ts
post.component.html
编辑2:发布reducer文件内容
post.reducer.ts