问题标签 [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 投票
4 回答
1973 浏览

angular - 如何测试返回多个动作的效果

我有一个返回动作 A 然后是动作 B 的效果

如何测试两个连续返回的操作?

0 投票
3 回答
5727 浏览

angular - ngrx 效果:由一个效果调度的动作是否立即被其他效果处理?

我有一个具有四个 ngrx 操作的 Angular (2) 应用程序:

  • 开始
    • 没有被reducer处理(没有状态改变)
    • ngrx Effect 调用异步任务并映射到 SUCCESS 或 ERROR
  • 成功
    • 由减速机处理
    • ngrx 效果映射到 ADVANCE
  • 进步
    • 不被减速机处理
    • ngrx 效果导航到不同的路线
  • 错误
    • 由减速机处理
    • 没有效果

问题是捕获 ADVANCE 的 Effect 似乎在处理 SUCCESS 的 reducer 之前运行

这是效果代码:

我得到的错误是Cannot read property 'bar' of null. 该属性foo由处理 SUCCESS 的 reducer 设置。

如果我为 SUCCESS 效果添加延迟,一切都会很好地工作:

但是不得不添加这个延迟对我来说没有意义。

console.log在各处添加了语句,输出如下所示:

  1. 成功效应
  2. ADVANCE 效果(显示 route.foo === null)
  3. SUCCESS reducer(显示 route.foo === 东西)
  4. 错误

我希望 SUCCESS 效果和 SUCCESS 减速器在 ADVANCE 效果之前运行。

难道我做错了什么?

期望减速器以与调度相同的顺序处理动作是不正确的吗?


版本:

  • @angular/cli:1.0.0-beta.32.3
  • 节点:7.5.0
  • 操作系统:达尔文 x64
  • @角/普通:2.4.7
  • @角/编译器:2.4.7
  • @角/核心:2.4.7
  • @角/形式:2.4.7
  • @角/http:2.4.7
  • @角/平台浏览器:2.4.7
  • @角/平台浏览器动态:2.4.7
  • @角/路由器:3.4.7
  • @angular/cli:1.0.0-beta.32.3
  • @angular/compiler-cli:2.4.7
  • @ngrx/core@1.2.0
  • @ngrx/效果@2.0.0
  • @ngrx/store@2.2.1
  • rxjs:5.1.1
0 投票
1 回答
402 浏览

angular - Optional Router Params with @ngrx

Similar to the ngrx/example-app, I am building an interface where users will be able to search for something by entering a text string.

I would like to update the url with an optional param (query=search_string) so that when the user returns to their search with the back button they return to the same search already loaded. (I'll also be doing the same thing for the page they are on)

What would be the appropriate way to add optional params with ngrx?

My thought is to put this into BookEffects since we do not want to update the route prior to the debounce time. But for some reason that doesn't feel right...

[Edit] To expand on this further, when the user navigates back to the search page, the search would need to be bootstrapped somehow. So my thought would be to also modify the FindBookPageComponent to include:

This still feels awkward because there would be an unnatural delay before the search results appear due to the debounce in the SearchAction. So does this mean we should also create a separate search action: ImmediateSearchAction?

0 投票
3 回答
4651 浏览

redux - 我应该将旨在将用于 ngrx 存储的数据转换为效果器或减速器的业务逻辑放在哪里?

我的问题与 ngrx效果减速器有关。

我需要先转换从后端检索到的数据,然后再将其放入ngrx 存储。从后端检索的数据是一个普通数组MessageMessage是我的应用程序中的自定义类型):

我需要将数组转换为以下内容:

基本上,我通过交易对手(收件人或发件人)ID(密钥)对用户的消息进行分组。

我不确定从何处执行转换Message[]Map<string, Message[]>我应该将转换业务逻辑放入@Effect还是放入reducer 函数中?

0 投票
1 回答
1480 浏览

rxjs - RxJs:如何将两个可观察对象组合成具有不同类型的新可观察对象

我对RxJsandNgRx store很陌生,我想创建一个@Effectwith 两个 observables 的组合(很难解释):

我的界面看起来像:

我正在尝试创建一个新对象productDetails并设置它的属性。属性是productwhich payloadhasproductproductBodywhich get from productService(id)(It returns observable<productBody>)

这个效果应该返回observable<productDetails>

这返回:Object {productBody: undefined, product: Object}

我明白为什么要返回undefinedproductBody不知道如何解决它。我尝试使用zip,switchMap等但没有机会!

0 投票
1 回答
494 浏览

javascript - 使用 NGRX / @Effects 处理表单状态

我有一个表单,在提交时我调度了一个被效果捕获的动作。然后效果会进行 http 调用。我想知道在此操作完成/失败后我将如何执行以下操作:

  • 操作完成后显示成功消息
  • 在下次使用表单时重置所有字段
  • 在操作失败后显示错误

我知道我可以重新调度一个动作来用几个标志等填充商店successerror但是,重置表单可能会通过调用一个函数来完成。订阅 store 并reset在 child 中调用相关函数是否可以接受?就好像我希望组件能够像效果一样聆听动作。

0 投票
1 回答
264 浏览

javascript - NGRX 将 reducer 状态传递给组件

我有一个代表以下对象的任务减速器:

现在,该对象被传递到一个哑组件中:

我不喜欢的是要访问我必须使用的任务列表tasks.tasks。我考虑过将error,loadingtasks单独传递给组件以及使用getter。tasks但是,当我传入 say and时,这会带来另一个问题users......我必须为两者传入一个loadinganderror属性tasksusers

这是一个人们只能接受的尴尬问题,还是有更好的解决方法?

0 投票
5 回答
24343 浏览

ngrx - 从组件分派操作时未调用ngrx效果

我遇到了一个问题,ngrx 商店没有发送一个动作来达到应该处理它的效果。

这是尝试分派的组件:

行动:

效果:

我可以在调试中看到该组件确实调用了调度方法。我还可以确认StandardSigninAction确实已实例化,因为构造函数中的断点被命中。

但是standardSignin$效果不叫...

什么可能导致不被调用的效果?

如何调试商店内正在发生的事情?

有人可以帮忙吗?

PS我在我的导入中运行上述效果如下:

编辑:这是我的 SessionSigninService.signin 方法(确实返回一个 Observable)

0 投票
1 回答
4225 浏览

ngrx - 如何调试或检查 ngrx 存储、操作和效果?

我的应用程序在分派操作时未分派某些操作或未调用某些效果时遇到问题(请参阅从组件分派操作时未调用 ngrx 效果)。

我想知道如何调试ngrx 商店、动作和效果。

由于我的环境中没有 ngrx 的打字稿源(似乎只有打字可用),还有其他方法可以了解商店中发生的事情和效果吗?

PS似乎开发商店工具只允许查看由减速器引起的变化。

0 投票
1 回答
918 浏览

ngrx - 订阅(存储)和调度之间的区别?

对于这个效果,

当我调度一个动作时,我可以考虑这两种方式

第一的,

第二,

以上两行有什么区别?对于第一个,它不会触发其他动作,但执行 do() 和 reducer 的行很好。