React js - prevstate 不记得以前的状态?
react js - prevstate does not remember the previous state?
我正在尝试访问和更新嵌套元素内的数组内的变量(状态);见下文。
interface IState {
fields: {
values: ['val1', 'val2'],
}}
我正在使用以下函数来更新数组中的元素:
onStateSubArrValueChange = (
newValue: string | Date | boolean,
fieldName: string,
index:number,
) => {
this.setState(prevState =>{
return{
...prevState,
fields: {
...prevState.fields,
[fieldName]:{
[index]:newValue
}
}
}
});
};
我在几个元素上使用了这个,当我改变它们时,最后一个值在状态变量中可见,这是最后更新的。如果我将数组写入文件,我可以看到最后一次更新,但看不到任何其他以前的更新。语法似乎是正确的,TypeScript 没有发出任何警报……该值确实写在元素中 (IState.fields.values[I])。我试图查看 Whosebug 和其他网站,但我似乎无法找到这不起作用的原因。我还尝试了不同的形式和位置来加载 ...prevState。我也使用了状态的正常传播,但显然这并没有保持以前的状态。
this.setState({
fields: {
...this.state.fields,
[fieldName]:{
[index]:newValue
}
}
});
提前感谢您的帮助。
我觉得应该是这样的
this.setState(prevState =>{
return{
...prevState,
fields: {
...prevState.fields,
values: [...prevState.fields.values, newValue]
}
}
});
或下面这个,因为我不太清楚这个问题
this.setState(prevState =>{
const tempValues = prevState.fields.values;
tempValues[indexToUpdate] = value
return{
...prevState,
fields: {
...prevState.fields,
values: tempValues
}
}
});
我正在尝试访问和更新嵌套元素内的数组内的变量(状态);见下文。
interface IState {
fields: {
values: ['val1', 'val2'],
}}
我正在使用以下函数来更新数组中的元素:
onStateSubArrValueChange = (
newValue: string | Date | boolean,
fieldName: string,
index:number,
) => {
this.setState(prevState =>{
return{
...prevState,
fields: {
...prevState.fields,
[fieldName]:{
[index]:newValue
}
}
}
});
};
我在几个元素上使用了这个,当我改变它们时,最后一个值在状态变量中可见,这是最后更新的。如果我将数组写入文件,我可以看到最后一次更新,但看不到任何其他以前的更新。语法似乎是正确的,TypeScript 没有发出任何警报……该值确实写在元素中 (IState.fields.values[I])。我试图查看 Whosebug 和其他网站,但我似乎无法找到这不起作用的原因。我还尝试了不同的形式和位置来加载 ...prevState。我也使用了状态的正常传播,但显然这并没有保持以前的状态。
this.setState({
fields: {
...this.state.fields,
[fieldName]:{
[index]:newValue
}
}
});
提前感谢您的帮助。
我觉得应该是这样的
this.setState(prevState =>{
return{
...prevState,
fields: {
...prevState.fields,
values: [...prevState.fields.values, newValue]
}
}
});
或下面这个,因为我不太清楚这个问题
this.setState(prevState =>{
const tempValues = prevState.fields.values;
tempValues[indexToUpdate] = value
return{
...prevState,
fields: {
...prevState.fields,
values: tempValues
}
}
});