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]
})
}