javascript - React 中复杂状态的深度合并

标签 javascript reactjs ecmascript-6

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

  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 中将新的对象属性合并到状态对象属性?

最佳答案

setState执行浅合并。如果元数据是扁平的:

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

或者如果使用传播:

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

关于javascript - React 中复杂状态的深度合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601834/

相关文章:

javascript - js中获取xml节点的行号

javascript - 如何在 Angular 中动态加载外部脚本?

javascript - Webpack resolve.alias 不适用于 VS Code IntelliSense

node.js - npm 错误!代码 UNABLE_TO_GET_ISSUER_CERT_LOCALLY

javascript - 如何更改antd中动态表单字段的值?

javascript - 如何在 jsx 中使用 if else 条件?

javascript - `function` 会生成 ES6 类(Babel)的实例吗?

javascript - jQuery 从具有给定名称的选中元素中获取值

javascript - 我不能引用 const 因为 "is not defined"但它是

javascript - Django-Chartit 'source' 必须是查询集、模型或管理器