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,这意味着他已经完成了适当的绑定。所以这不是问题。检查重复的问题是的,他一分钟前刚刚更新了显示绑定的代码段。谢谢