Redux 在ui上重新创建新对象

Redux 在ui上重新创建新对象,redux,Redux,创建一个非常认真地使用redux状态的应用程序 在UI组件和还原程序之间传递值时。不变性已成为一个问题 1) 循环问题——我有创建JSON对象的表单——然后由还原程序使用这些表单来维护模型。下次使用表单时,它将设置为早期状态,。。并且要么给出错误,要么更新前一个属性及其自身。是否有某种方法可以捕获非redux状态的内容,然后将其传递给状态以进行处理 2) Redux返回或还原程序在规模上变得非常难以管理。我已经开始使用immer进行此操作。这是一个好的选择吗?您是否使用Reactjs创建表单 为

创建一个非常认真地使用redux状态的应用程序

在UI组件和还原程序之间传递值时。不变性已成为一个问题

1) 循环问题——我有创建JSON对象的表单——然后由还原程序使用这些表单来维护模型。下次使用表单时,它将设置为早期状态,。。并且要么给出错误,要么更新前一个属性及其自身。是否有某种方法可以捕获非redux状态的内容,然后将其传递给状态以进行处理


2) Redux返回或还原程序在规模上变得非常难以管理。我已经开始使用immer进行此操作。这是一个好的选择吗?

您是否使用Reactjs创建表单

为了最大限度地受益于不可变性,最好是您的设计也包含不可变性。 我的意思是:开发一个只显示数据的表单。(纯粹的形式,或纯粹的形式)

然后用另一个组件包装这个表单/组件,该组件保存要显示的表单的状态,并通过纯表单实际显示数据。并允许您编辑它

层次结构看起来像:App>Form>FormPure

  • 组成部分
    • 表格:
      • 连接到Redux
      • 可能有自己的状态
    • FormPure:
      • 不知道redux
      • 仅显示从其父级提供的数据(在react中通过props和回调进行通信)
当用户点击Save按钮时,连接的组件(表单)可能会发送一个操作来更新redux中的状态

通过这种方式,您可以独立于任何数据构建FormPure,并根据需要使其生效

您可以考虑使用良好的设计组件。

对于2:是的,immer的使用是合理的,只是确保您没有过度使用它,创建大型对象树,如文档中所述。 另外,在将其部署到生产环境时,请确保关闭自动冻结


提示:immer使用确保您的目标平台支持它们,或者确保切换到速度相当慢的ES5实现(请参阅)

我真的很喜欢您的建议-这很有道理-它提供了额外的自由好处,使样式和逻辑相距甚远!它还允许您单独测试表单。一旦你写了你的FromPure,你就再也不用碰那个文件了。您可以简单地用另一个表单包装它以显示其他数据。尽量使组件尽可能小并重用它们。我尝试只将尽可能少的组件连接到redux,并创建尽可能多的纯组件。