Reactjs this.setState不更新状态
我试图在Reactjs this.setState不更新状态,reactjs,Reactjs,我试图在handleFormSubmit中使用this.setState,但是this.setState没有更新,我不知道为什么。如果在this.setState之前运行console.log(updatePosition),我可以确定所有数据都在那里。我错过了什么?我对handleChange使用了类似的代码,我没有问题 constructor(props) { super(props); let uniqueId = moment().valueOf(); this.stat
handleFormSubmit
中使用this.setState
,但是this.setState
没有更新,我不知道为什么。如果在this.setState
之前运行console.log(updatePosition)
,我可以确定所有数据都在那里。我错过了什么?我对handleChange使用了类似的代码,我没有问题
constructor(props) {
super(props);
let uniqueId = moment().valueOf();
this.state = {
careerHistoryPositions: [{company: '', uniqueId: uniqueId, errors: {} }],
};
this.handleFormSubmit = this.handleFormSubmit.bind(this);
}
handleFormSubmit(event) {
event.preventDefault();
const { careerHistoryPositions } = this.state;
const updatePosition = this.state.careerHistoryPositions.map((careerHistoryPosition) => {
const errors = careerHistoryValidation(careerHistoryPosition);
return { ...careerHistoryPosition, errors: errors };
});
console.log(updatePosition)
this.setState({ careerHistoryPositions: updatePosition });
}
您应该显示如何调用
handleFormSubmit
它很可能绑定到Dom事件。因此this
不是类/组件,如果您console.log(this)代码>您将看到它是Dom元素,表单元素
要使代码按预期工作,请在组件的constructor()
方法中,添加此项以将处理程序函数重新绑定到react组件的类方法,这样您就可以访问this.state
和this.setState()
您应该显示如何调用handleFormSubmit
它很可能绑定到Dom事件。因此this
不是类/组件,如果您console.log(this)代码>您将看到它是Dom元素,表单元素
要使代码按预期工作,请在组件的constructor()
方法中,添加此项以将处理程序函数重新绑定到react组件的类方法,这样您就可以访问this.state
和this.setState()
请记住,状态不会立即更新。如果您想检查它是否已更新,请使用回调函数。具体如下:
this.setState({ careerHistoryPositions: updatePosition }, () => console.log(this.state.careerHistoryPositions);
从文档中:
setState()不会立即改变this.state,但会创建
等待状态转换。调用此命令后访问this.state
方法可能返回现有值。没有
保证对setState的调用和可能发生的调用的同步操作
为提高性能而进行批处理
希望这有帮助。请记住,状态不会立即更新。如果您想检查它是否已更新,请使用回调函数。具体如下:
this.setState({ careerHistoryPositions: updatePosition }, () => console.log(this.state.careerHistoryPositions);
从文档中:
setState()不会立即改变this.state,但会创建
等待状态转换。调用此命令后访问this.state
方法可能返回现有值。没有
保证对setState的调用和可能发生的调用的同步操作
为提高性能而进行批处理
希望这能有所帮助。您的代码似乎很好,在此之后,您在哪里检查状态是否已更新。setstate可能重复的在这种情况下,它是我标记的问题的重复。检查该问题的答案谢谢@shubhamkhattriyou代码似乎很好,在此之后,您在哪里检查状态是否已更新。setstate可能重复的在这种情况下,它是我标记的问题的重复。检查该问题的答案谢谢@shubhamkhattrias,OP说,他能够看到console.log(updatePosition)
的正确O/P,这意味着他已经完成了适当的绑定。所以这不是问题。检查重复的问题是的,他一分钟前刚刚更新了显示绑定的代码段。谢谢。正如OP所说,他能够看到console.log(updatePosition)
的正确O/P,这意味着他已经完成了适当的绑定。所以这不是问题。检查重复的问题是的,他一分钟前刚刚更新了显示绑定的代码段。谢谢