if 语句中 setState() 的问题

Leo*_*eon 3 javascript reactjs react-native

if 语句中的 setState() :

// morePage = true
// pageNum = 1

if(morePage){
  this.setState({pageNum: this.state.pageNum+1})
}

console.log(this.state.pageNum); // return: 1
Run Code Online (Sandbox Code Playgroud)

setState() 输出 if 语句:

// morePage = true
// pageNum = 1

if(morePage){
  // ... 
}
this.setState({pageNum: this.state.pageNum+1})

console.log(this.state.pageNum); // return: 2
Run Code Online (Sandbox Code Playgroud)

我现在就面临这个问题,我想知道为什么......

谢谢 :)

正确答案后编辑:

所以是的,我应该花更多的时间阅读 React 的文档:P 如果有人有兴趣知道我最终是如何做到的,这里是答案:

在文档中,他们说无法保证您的状态在重新渲染之前将具有新的值。所以你必须使用“componentDidUpdate()”。

所以我所做的是,我把:

this.setState({pageNum: this.state.pageNum+1})
Run Code Online (Sandbox Code Playgroud)

在我创建的随机函数内,之后在“componentDidUpdate(prevProps, prevState)”函数中我可以访问新的和旧的 props 值,并且在那里我可以使用“pageNum”的先前值和当前值:)

Sta*_*ess 5

setState() 不会立即改变 this.state ,而是创建一个挂起的状态转换。调用此方法后访问 this.state 可能会返回现有值。
无法保证 setState 调用的同步操作,并且可以对调用进行批处理以提高性能。

如前所述,不能保证状态值将在下一行代码中更新。

如果您想检查调试状态,请尝试将其记录在render方法中,因为此方法在状态更新后被调用