Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法更新对象的状态_Javascript_Reactjs - Fatal编程技术网

Javascript 无法更新对象的状态

Javascript 无法更新对象的状态,javascript,reactjs,Javascript,Reactjs,我有一个反应状态,它存储: permissionValue: [{user_id: 1, landing: true, skadi: true, heimdall: true, register: true, …}] 我想更新这个状态。我也是 handleChangePermissions = evt => { console.log(this.state.permissionValue); //I can see the initial state console.log("

我有一个反应状态,它存储:

permissionValue:  [{user_id: 1, landing: true, skadi: true, heimdall: true, register: true, …}]
我想更新这个状态。我也是

handleChangePermissions = evt => {
  console.log(this.state.permissionValue); //I can see the initial state
  console.log("id: " + evt.target.id); //Thats the proper key
  console.log("checked: " + evt.target.checked); //Thats the proper value

  var data = this.state.permissionValue[0]; //I store the content of the array in data
  console.log("data1");
  console.log(data); //I can see the array data
  data.evt.target.id = evt.target.checked; //I set the data , supposedly, but I receive " Cannot read property 'target' of undefined "
  //Crashes
  console.log("data2");
  console.log(data);
  console.log("----");
  this.setState({
    permissionValue: data
  });
};

但在设置数据期间读取evt时,它会崩溃。问题出在哪里?

一个原因可能是使用onChange={this.handleChange()} . 在这种情况下,只需将函数作为值传递给onChange,而无需调用它

onChange={this.handleChange}
或者尝试传递事件对象,如

onChange={(e) => handleChange(e)}
状态为只读 请勿在useState挂钩或this.setState之外修改状态

由于“按引用传递”与“按值传递”的概念,这一行是一个问题

data.evt.target.id=evt.target.checked

你需要做的是复制一份状态并在那里进行更改。然后做出改变

this.setState({
  permissionValue: {
    ...data,
    evt: {
      ...data.evt,
      target: {
        ...data.evt.target,
        id: evt.target.checked,
      }
    }
  }
});

var data={…this.state.permissionValue[0]}

已解决

handleChangePermissions = (evt) => {
    console.log(this.state.permissionValue) 
    console.log("id: " + evt.target.id) 
    var idu = evt.target.id;
    var checked = evt.target.checked
    console.log("checked: " + evt.target.checked) 

    var data = this.state.permissionValue[0]; 
    console.log("data1")
    console.log(data) 
     data[idu] = checked; 
     console.log("data2")
     console.log(data)


       this.setState({
           permissionValue: [data]
      })


}