如何使用ES6 Spread更新多个对象子字段?

时间:2018-08-16 19:25:52

标签: javascript reactjs ecmascript-6

我们有react-graph-vis处于状态的选项:

{
    options: {
        physics: {
            enabled: false
            ...
        }
    }
    nodes: {
        font: “12px sans-serif #888f99”
        ...
    }
}

我们要使用父组件中的道具更新options.physics.enabledoptions.nodes.font,而无需删除或编辑状态下的任何其他默认选项:

<Graph
    graph={this.state.graph}
    options={{
        ...this.state.options,
        physics: { enabled: {this.props.isPhysicsOn}},
        nodes: {nodes: {font: this.props.isNodeLabelShowing ? ‘12px sans-serif #888f99’ : ‘12px sans-serif transparent’},
    }}
    events={this.events}
/>

我错了吗?

1 个答案:

答案 0 :(得分:5)

您的第一次传播很棒,您也只需为孩子对象传播。

<Graph
  graph={this.state.graph}
  options={{
    ...this.state.options,
    physics: {
      ...this.state.options.physics,
      enabled: this.props.isPhysicsOn
    },
    nodes: {
      ...this.state.options.nodes,
      font: this.props.isNodeLabelShowing ? '12px sans-serif #888f99' : '12px sans-serif transparent',
    },
  }}
  events={this.events}
/>

您是正确的,因为您要删除physicsnodes中的所有其他字段。试试这个^^。