小编典典

React中复杂状态的深度合并

reactjs

当我声明以下初始状态时:

  getInitialState: function() {
    return {
      isValid: false,
      metaData: {
        age: 12,
        content_type: 'short_url'
      }
    };
  },

我用setState这样更新状态:

...
let newMetaData = {  age: 20 };
...
this.setState({
        isValid: true,
        metaData: newMetaData
      });
...

结果this.state.metadata对象仅定义了年龄。但据我所知,this.setState()将其参数合并到现有状态。为什么它在这里不起作用,这不是应该经常合并吗?

有没有办法在React / ES6中将新对象属性合并为状态对象属性?


阅读 505

收藏
2020-07-22

共1个答案

小编典典

setState执行浅合并。如果metaData是平坦的:

this.setState({
  metaData: Object.assign({}, this.state.metaData, newMetaData),
});

或者使用点差:

this.setState({
  metaData: { ...this.state.metaData, ...newMetaData },
});
2020-07-22