Reactjs 该州没有';不要像应该的那样更新

Reactjs 该州没有';不要像应该的那样更新,reactjs,setstate,Reactjs,Setstate,用于更新状态的简单输入字段 如果输入5并单击“保证”,则“之前”日志显示0,但“之后”日志也显示0。如果你再次点击按钮,它会显示5,并且会继续这样。就像它总是在后面 为什么呢 App.js state = { fundGoal: 1000, amountFunded: 0 } getAmount = amount => { console.log('before', this.state.amountFunded) const parsedAmou

用于更新状态的简单输入字段

如果输入5并单击“保证”,则“之前”日志显示0,但“之后”日志也显示0。如果你再次点击按钮,它会显示5,并且会继续这样。就像它总是在后面

为什么呢

App.js

state = {
    fundGoal: 1000,
    amountFunded: 0
  }

  getAmount = amount => {
    console.log('before', this.state.amountFunded)
    const parsedAmount = parseInt(amount)
    this.setState(prevState => ({
      amountFunded: prevState.amountFunded + parsedAmount
    }))
    console.log('after', this.state.amountFunded)
  }
在另一个组件中形成

getAmount = e => {
    e.preventDefault()
    const value = e.target.elements.amount.value
    this.props.getAmount(value)

    e.target.elements.amount.value = ''
  }

因为
setState
是一个异步调用。事务完成后会有一个回调

this.setState(prevState => ({
      amountFunded: prevState.amountFunded + parsedAmount
    }), () => console.log('after', this.state.amountFunded))
setState()函数以异步方式运行,因此,如果希望在setState()完成运行后看到更新的状态,可以按如下方式将回调函数传递给setState

getAmount = amount => {
    console.log('before', this.state.amountFunded)
    const parsedAmount = parseInt(amount)
    this.setState(prevState => ({
      amountFunded: prevState.amountFunded + parsedAmount
    }), () => console.log('after', this.state.amountFunded));
  }

哦,所以这不是一步落后,只是我没有正确记录它。。。谢谢!