setState 回调中的此值。一个小小的困惑

This value on setState callback. A tiny confusion

问题:setState(?)回调中this的值是多少

考虑一下:

handleChange = (event) => {
    const { name, value } = event.target;
    const {content, errors} = this.state;
    this.setState({
      content: {
        ...content,
        [name]: value
      },

状态的简单更新...但之后我调用了回调,并尝试访问我的 var contenterrors,那些值是多少?。

this.setState({
      content: {
        ...content,
        [name]: value
      },
      errors: {
        ...errors,
        [name]: validations[name] && validations[name](value)
      }
    }, () => {
      // commenting this line, I get the content out of date. 
      // const {content, errors} = this.state; 
      ! this.hasErrors() //if doesn't have errors. 
      ? this.props.fn({...content, students : [content.studentA, content.studentB]})
      : this.props.fn({...content, hasError: true, errors}) //should be emptyField(?) 
    })

内容或错误值有点旧,所以我需要"updated"它从this.state中获取老化的值。

  const {content, errors} = this.state; 

如果没有前一行,当我尝试访问内容或错误时,我会得到前一个状态的值。我需要重新声明内容和错误,以获得更新的状态。

谁能给我解释一下这是怎么回事?

我认为你不需要再传播旅游错误或内容你能解释更多吗,你到底想做什么?

我假设您想在 setState 之后立即使用更改后的状态? 如果是这样,您通过添加回调就部分正确了。

但是您使用的是设置新状态之前的状态中的 content 状态。相反,您应该使用 this.state.content

所以你需要 const {content, errors} = this.state;

原因: setState 是异步的,因此您不能假设状态在您调用 setState 后立即发生了变化。而 setState 调用前的内容和错误只会在重新渲染后得到新的值。在重新渲染之前访问的唯一方法是添加回调并使用 this.state.variable 访问它。