Ngrx复状态减速机

时间:2018-05-28 16:10:50

标签: ngrx

我很难找到在ngrx应用程序中改变状态的正确方法,因为状态相当复杂且取决于许多因素。这个问题不是关于如何正确地编写一个代码,而是关于如何设计这样一个软件的更多内容,在找到一些hacky解决方案和解决方法时应该做些什么和不应该做什么。

应用程序'随着时间的推移'进化'我不想以抽象的方式分享这个过程,以明确我的观点:

第1阶段

州包含实体。它们代表树中的节点并通过ID链接。修改或添加实体需要检查新/已修改的节点应该连接的节点类型。也可能是在修改节点时,必须更新其他节点。

解决方案是:创建完成工作的功能。在reducer中调用它们所以一切都是最新的并且在使用时同步(有些服务可能会修改状态)。

第2阶段

将配置添加到对修改/创建自动修改节点的方式有影响的状态。此配置在根状态下保存在自己的状态中。

解决方案:

1)修改操作以从配置中获取所需数据。

2)修改创建/调度动作的位置(添加一些丑陋的

this.state.select(fromRoot.getX)
.first()
.(subscribe(element => {this.state.dispatch(new Action({...old_payload, newPayload: element}))})

围绕调度调用包装

3)修改执行节点修改的函数和

4)将参数传递添加到reducer

中的函数调用

第3阶段

现在我要求再次为流程添加另一个配置,也由后端重新启动,并保存在根状态下的另一个状态

现在状态如下:

root
|__nodes
|__config_1
|__config_2
我正准备在第2阶段重复这些步骤,但是所有传入的数据和函数都必须携带大量数据。当我实际上在包含所有需要信息的状态上发布动作时,这似乎是错误的。

我该如何处理这个问题?

有些想法已经有了:

使用效果:它们能够从他们需要的状态获取所有内容并且可以创建所有内容 - 因此我只需要仅使用动作有效负载调度动作,然后效果可以从所需的状态获取所有内容。我不喜欢这个想法,因为它会触发异步任务来修改状态并添加非状态更改操作。

使用服务:服务保持状态与效果非常相似,但不使用动作来创建异步调用,然后调度可以重新改变状态的动作。

完成组件的所有操作:目前组件在更改状态时保持非常简单,因为我更喜欢操作尽可能少地携带数据,因为reducer可以访问状态以获取数据 - 但这就是问题所在,这次我无法掌握所需的数据。

0 个答案:

没有答案