setState():
// morePage = true
// pageNum = 1
if(morePage){
this.setState({pageNum: this.state.pageNum+1})
}
console.log(this.state.pageNum); // return: 1
setState()if if statement:
// morePage = true
// pageNum = 1
if(morePage){
// ...
}
this.setState({pageNum: this.state.pageNum+1})
console.log(this.state.pageNum); // return: 2
我现在正面对这一点,我想知道为什么......
谢谢:)
在正确的答案后编辑:
所以是的,我应该花更多的时间阅读React的Doc:P 如果有人有兴趣知道我最终是怎么做的,这就是答案:
在文档中,他们说不能保证你的州在重新渲染之前会有新的价值。所以你必须使用" componentDidUpdate()"。
所以我做的是,我把:
this.setState({pageNum: this.state.pageNum+1})
在我创建的随机函数中,之后在" componentDidUpdate(prevProps,prevState)"功能我可以访问新的和旧的道具值,在那里我可以使用" pageNum"的前一个和当前值。 :)
答案 0 :(得分:3)
setState()不会立即改变this.state,但会创建挂起状态转换。调用此方法后访问this.state可能会返回现有值 无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升。
如上所述,无法保证在下一行代码中更新状态值。
如果要检查调试状态,请尝试使用render
方法将其记录,因为在更新状态后调用此方法
答案 1 :(得分:0)
使用setState合并当前和以前的状态。因此价值。此外,它同步可能会产生意想不到的结果。
答案 2 :(得分:0)
备注:强>
后访问this.state
setState()
不会立即改变this.state
,但会创建待处理状态转换。调用此方法can potentially return the existing value.
除非在shouldComponentUpdate()中实现条件呈现逻辑,否则
There is no guarantee of synchronous operation of calls to setState and calls may be batched for performance gains.
setState()
将始终触发重新渲染。如果正在使用可变对象且无法在shouldComponentUpdate()中实现逻辑,则仅当新状态与先前状态不同时调用setState()将避免不必要的重新渲染。
您可以从官方文档中获取更多信息 https://facebook.github.io/react/docs/component-api.html
答案 3 :(得分:0)
所以基本上你的问题是其他人从setState引用的。但你可以轻松地console.log
做:
this.setState({pageNum: this.state.pageNum+1}, () => {
console.log(this.state.pageNum);
})
请参阅setState
定义:
void setState(
function|object nextState,
[function callback]
)