如何最好地使用反应状态?

Fed*_*nko 5 javascript ngrx angular ngrx-store

我有一个很大的组成部分,我将所有有关选定项目的信息以及所有信息存储在store(ngrx)中。该组件有不同的类型,我可以在它们之间切换并更改有关它们的信息(通过输入)。然后,单击保存按钮,将所有更改发送到服务器。

将更改的数据存储在存储中的最佳方法是什么?

  • 在onchange事件期间发送到商店(减去:大量调度)
  • 在类型之间切换时发送(减号:减号:您需要以某种方式检查立即更改的类型的状态,然后按保存按钮)
  • 或者,总的来说,放置会更改的元素并更好地将其存储以供使用是一种不好的做法吗?

另一个问题是,在reducer中执行计算是否正确?例如,我在商店中调度了一个元素列表,并且需要为所选类型添加一个新元素。我可以通过该服务执行此操作,但是随后我需要提取所有元素,所选类型和其他一些参数,然后执行操作并将更改后的数组放回存储中。或使用已知数据在减速器中执行所有这些操作。还是总的来说,这是将清单保存在商店中的错误架构方法吗?

tim*_*ver 2

在不了解用例的情况下,很难给出这个问题的正确答案,因为这完全取决于需求。

根据经验,如果状态仅影响当前组件,则 ngrx 存储不是存储其数据的位置。一个例子是表单,将表单与商店中的状态同步通常是一种矫枉过正的做法。话虽这么说,如果您需要在表单上进行补充,这是保持表单和商店同步的一个很好的用例。

恕我直言,分派大量操作的缺点并不是它的“真正”缺点 - ngrx 存储(通常是 redux)旨在处理大量传入操作。

要回答第二个问题,是的,恕我直言,这是减速器 - 这是我期望一些逻辑的地方。请参阅redux 文档以获取更多信息。

您还可以在选择器中放置一些“视图逻辑”,例如过滤、排序、分页……

Mike 和 Brandon 在 ng-conf 上发表了演讲,他们解释了哪些内容应该属于状态,哪些不属于状态。该演讲提供了有用的见解,Reducing the Boilerplate with NgRx