React .setState() 中的扩展运算符

IT技术 javascript reactjs jsx
2021-05-08 18:52:19

鉴于以下从 React 类组件中提取的片段:

constructor(props) {
    super(props)
    this.state = { active: true }
  }

  deactivate = () => {
    this.setState({ ...this.state, active: false })
  }

扩展运算符进入 stopCounter() 方法的目的是什么?该应用程序也可以删除它:

  deactivate = () => {
    this.setState({ active: false })
  }
3个回答

在这种情况下两者都有效,但您不需要使用它。只需设置状态就可以了:

this.setState({active: false})

但是让我解释一下,如果您有嵌套级别的状态,例如:

state = {
  foo: {
   a: 1,
   b: 2,
   c: 3
  }
}

当您只需要更新 foo 的 c 状态时,您将需要合并状态,如:

this.setState({ foo: {
  ...this.state.foo,
  c: 'updated value'
}})

因此,扩展语法将对象与后面的对象合并。它类似于Object.assign

目标只是设置activefalse并保留其余部分,无需修改。您可以编辑状态的一部分,只需传递所需的名称,然后跳过其余部分。

第二个片段有效,因为 React 隐式地​​为你做传播。根据React 的文档setState

您可以 [...] 将一个对象作为第一个参数传递给setState(): setState(stateChange[, callback])这执行 stateChange 到新状态的浅合并。