Javascript React Js:从对象数组更新一项
在我的数据库中,我有一个开放的时间表,我有一周中每天的班次, 当我试图修改一天的开放时间时,其他天的开放时间将被删除Javascript React Js:从对象数组更新一项,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,在我的数据库中,我有一个开放的时间表,我有一周中每天的班次, 当我试图修改一天的开放时间时,其他天的开放时间将被删除 这是我更新状态数据的代码 async handleChange(e) { const target = e.target; const name = target.name; const value = target.value; await this.setState({ opening_time: { ...t
这是我更新状态数据的代码
async handleChange(e) {
const target = e.target;
const name = target.name;
const value = target.value;
await this.setState({
opening_time: {
...this.state.opening_time,
[this.state.day]: [['1', name == '0' ? value : this.state.opening_time[this.state.day][0][1], name == '1' ? value : this.state.opening_time[this.state.day][0][2]],(name == '2' || name == '3')? ['1', name == '2' ? value : this.state.opening_time[this.state.day][1][1], name == '3' ? value : this.state.opening_time[this.state.day][1][2]]:['0']]
}
});
this.props.setData({ opening_time: JSON.stringify(this.state.opening_time) })
}
这是我的开放时间格式
{"Mon":[["1", "08:00", "12:15"],["1", "14:14", "23:23"]],"Tue":[["0"],["0"]],"Wed":[["0"],["0"]],"Thu":[["0"],["0"]],"Fri":[["0"],["0"]],"Sat":[["0"],["0"]],"Sun":[["0"],["0"]]}
谁能帮帮我!谢谢使用以前的状态来更新状态,而不是直接在状态中使用this.state。 请参阅React文档 在您的代码中,您可以像下面这样重写代码
this.setState(prevState => ({
opening_time: {
...prevState.opening_time,
[prevState.day]: [['1', name == '0' ? value : prevState.opening_time[prevState.day][0][1], name == '1' ? value : prevState.opening_time[prevState.day][0][2]],(name == '2' || name == '3')? ['1', name == '2' ? value : prevState.opening_time[prevState.day][1][1], name == '3' ? value : prevState.opening_time[prevState.day][1][2]]:['0']]
}
}));
{"Mon":[["1", "08:00", "12:15"],["1", "14:14", "23:23"]],"Tue":[["0"],["0"]],"Wed":[["0"],["0"]],"Thu":[["0"],["0"]],"Fri":[["0"],["0"]],"Sat":[["0"],["0"]],"Sun":[["0"],["0"]]}
this.setState(prevState => ({
opening_time: {
...prevState.opening_time,
[prevState.day]: [['1', name == '0' ? value : prevState.opening_time[prevState.day][0][1], name == '1' ? value : prevState.opening_time[prevState.day][0][2]],(name == '2' || name == '3')? ['1', name == '2' ? value : prevState.opening_time[prevState.day][1][1], name == '3' ? value : prevState.opening_time[prevState.day][1][2]]:['0']]
}
}));
setData(data) {
this.setState(prevState => ({ data: { ...prevState.data, ...data } })_