状态未按应有的方式更新
The state doesn't update as it should
用于更新状态的简单输入字段。
如果你输入5然后点击'Pledge','before'日志显示0,但是'after'日志也显示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));
}
用于更新状态的简单输入字段。
如果你输入5然后点击'Pledge','before'日志显示0,但是'after'日志也显示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));
}