应该如何进行Redux State Anatomy?

时间:2017-02-22 20:56:02

标签: reactjs redux

我正在一个复杂的React App中工作,该应用程序处理带来Deeply Big JavaScript对象的异步调用。我想知道创建一个存储这个对象的状态的更好方法是什么。 Redux文档说:

  

在更复杂的应用中,您希望不同的实体互相引用。我们建议您尽可能保持您的状态正常化,而不进行任何嵌套。将每个实体保存在以ID作为密钥存储的对象中,并使用ID从其他实体或列表中引用它。将应用程序的状态视为数据库。这种方法在normalizr的文档中有详细描述。例如,保持todosById:{id - > todo}和todos:在一个真实的应用程序中,状态内的数组会是一个更好的主意,但我们仍然保持这个例子的简单。

如果我只在我的状态存储引用,我应该在哪里存储我的对象?

这个问题有意义吗?

Redux州有什么好处?一个大的扁平状态?还是中等不平坦的状态?

2 个答案:

答案 0 :(得分:4)

对象也应该存储在redux存储中。我们的想法是,您可以通过ID引用其他对象,而不是嵌套完整对象。您可以在此页面上查看示例:http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html

答案 1 :(得分:4)

  

如果我只在我的状态下存储引用,那么我应该在哪里存储我的对象?

您仍然将对象存储在状态中。这句话试图说的是,而不是存储待办事项列表:

{
  todos: [
    {
      id: '1',
      value: 'Pay rent',
      completed: false
    },
    {
      id: '2',
      value: 'Buy food',
      completed: true
    }
  ]
}

你可以存储id引用的待办事项,并且在todo列表中你只保留对它的引用:

{
  todosById: {
    1: {
      id: '1',
      value: 'Pay rent',
      completed: false
    },
    2: {
      id: '2',
      value: 'Buy food',
      completed: true
    }
  },
  todos: [1, 2]
}

这种方法有一些优点。编辑待办事项非常简单,您不需要触摸todos州。如果您以后想在另一个待办事项列表中引用待办事项,则不需要复制整个待办事项对象,只需创建一个带引用的新列表,例如:

allTodos: [1, 2],
urgentTodos: [1]

至于你的第二个问题:

  

Redux州有什么好处?一个大的扁平状态?还是中等不平坦的状态?

这真的取决于你的应用。