Reactjs 不能反应

Reactjs 不能反应,reactjs,setstate,Reactjs,Setstate,由于某些原因,我无法在React onClick中设置状态。如果我在shape1中硬编码来代替shape,这是可行的,但是我希望循环遍历每个键并动态设置它,因为存在数量可变的形状 resetColors() { Object.keys(this.state).forEach(shape => { this.setState({shape: 'black'}) }) } 问题中的代码总是将单个形状状态值设置为黑色,而不指定多个形状值。我认为您希望传入数组的shape变量将在

由于某些原因,我无法在React onClick中设置状态。如果我在shape1中硬编码来代替shape,这是可行的,但是我希望循环遍历每个键并动态设置它,因为存在数量可变的形状

resetColors() {
  Object.keys(this.state).forEach(shape => {
    this.setState({shape: 'black'})
  })
}

问题中的代码总是将单个形状状态值设置为黑色,而不指定多个形状值。我认为您希望传入数组的shape变量将在花括号内用作要设置的变量的名称。容易犯错误,但在JS中,冒号左边的名称是静态文本,不受范围内变量的影响

根据你的描述,我相信你使用了像shape1,shape2这样的州名。因此,这样的代码可能会起作用:

resetColors() {
  const valuesToSet = {};
  Object.keys(this.state).forEach(keyName) => {
    valuesToSet[keyName] = 'black'; 
  });
  this.setState(valuesToSet);
}
但老实说,这是一种危险而怪异的编码方式。风险很大,因为如果您稍后添加另一个不属于形状的状态变量,它将被覆盖。奇怪的是,因为您正在用变量命名重新发明数组的常用功能

相反,我建议将“shape1”、“shape2”等状态值转换为单个“shapes”数组以存储在状态中。然后您可以使用如下代码:

resetColors() {
  const newShapes = this.state.shapes.map( (shape) => 'black' );
  this.setState({ shapes: newShapes });
}
我想resetColors{Object.keysthis.state.forEachshape=>{this.setState{[shape]:'black'}}}应该适合您可能的重复