应该陈述是嵌套的还是平的

时间:2017-03-30 21:21:42

标签: javascript reactjs

例如,

constructor(props) {
  super(props);
  this.state = {
    interactions: {
      liked: [],
      saved: [],
      receivedLikeRecently: null
  }
}

我试图绕过不变性,所以如果我现在要将receivedLikeRecently更新为true,我是否必须这样做:

this.setState({
  interactions: {
    receivedLikeRecently: true
  }
});

其他价值怎么样?我是否还需要包括它们?

根据文档,setState执行浅合并,所以我假设其他嵌套属性不会复制到右边?还是我误会了?

由于

2 个答案:

答案 0 :(得分:2)

你应该保持你的状态保持平稳,以避免深度合并,这必须手动完成,并且可能会变得非常烦人,除了如果经常进行性能损失。

Component.setState使用简单的===来测试属性是否已更改,这将导致它始终更新状态对象的对象值属性。

答案 1 :(得分:1)

你是对的,嵌套状态更新需要更精细的合并。

有一个状态规范化的概念,为Redux描述,但也适用于React状态。 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html

我们的想法是,将状态视为关系数据存储,以便于使用它。