Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript redux中的分裂状态_Javascript_Redux - Fatal编程技术网

Javascript redux中的分裂状态

Javascript redux中的分裂状态,javascript,redux,Javascript,Redux,我在redux的一个状态开始变得非常复杂,很难维护: const state = { Mode: [ ['foo', { prop2: [{id: id, otherValue: otherValue}], id: 0 } ], ['bar', { prop3: [{id: id, otherValue: otherValue}], } ]] } 例如,当我想给pro

我在redux的一个状态开始变得非常复杂,很难维护:

const state = {
  Mode: [
    ['foo', 
      {
        prop2: [{id: id, otherValue: otherValue}],
        id: 0
      }
    ], ['bar', 
      {
        prop3: [{id: id, otherValue: otherValue}],
      }
    ]]
}
例如,当我想给prop3添加一个值时,我有一个map in a map in a map in a map

我想把这个状态分割成多个还原器,以便有更简单的还原器

通常,当状态的不同部分不相关时,我使用多个减速机:

UserReducer
PostReducer
CommentReducer
:例如,这些Reducer不相关,可以单独更新。 在我的例子中,状态和不同部分是相关的。
简化部分状态更新的好方法是什么?

像“重新选择”这样的工具有帮助吗

如您所见,您应该简化状态形状,对其进行规范化。例如,如果模式元素的顺序很重要,可以将其分为两部分:一部分状态包含“模式”列表,另一部分包含顺序。像这样:

Modes: { 
        foo: { prop2:[/*...*/] },
        bar: { prop3:[/*...*/] },
        /*...*/
      },
Order: { 
        foo: 1,
        bar: 0,
        /*...*/
      },
排序任务由选择器执行,选择器检索状态的模式部分。
但是,要管理复杂的状态形状,您可以使用:它可以帮助您更新复杂嵌套对象中的部分状态,而不影响其他属性

您真的需要
模式
成为包含数组的数组吗?你不能为
foo
bar
使用对象吗(
模式:[{foo:{prop2:[/*…*/]},/*…*/]
)是的,我需要,因为顺序在我的情况下很重要。但这是一个例子,我的状态比这更复杂。作为一个“元组集合”,我关心的是切片缩减器,我想这就结束了我的问题,我最终使用normalizer来规范化我的状态形状。它导致更小的减速器。它还会导致其他问题(删除一个实体及其子实体将变得非常重要)