Javascript if语句中的setState()出现问题
if语句中的setState():Javascript if语句中的setState()出现问题,javascript,reactjs,react-native,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 // morePage = true // pageNum = 1 if(morePage){ // ... } this.setState({pageNum:
// morePage = true
// pageNum = 1
if(morePage){
this.setState({pageNum: this.state.pageNum+1})
}
console.log(this.state.pageNum); // return: 1
// morePage = true
// pageNum = 1
if(morePage){
// ...
}
this.setState({pageNum: this.state.pageNum+1})
console.log(this.state.pageNum); // return: 2
setState()out if语句:
// morePage = true
// pageNum = 1
if(morePage){
this.setState({pageNum: this.state.pageNum+1})
}
console.log(this.state.pageNum); // return: 1
// morePage = true
// pageNum = 1
if(morePage){
// ...
}
this.setState({pageNum: this.state.pageNum+1})
console.log(this.state.pageNum); // return: 2
我现在面临这个问题,我想知道为什么
谢谢:)
在正确答案后编辑:
所以,是的,我应该花更多的时间阅读React的医生:p
如果有人想知道我最后是怎么做的,下面是答案:
在文档中,他们说不能保证你的状态在重新呈现之前会有新的值。所以您必须使用“componentDidUpdate()”
所以我做的是,我把
this.setState({pageNum: this.state.pageNum+1})
在我创建的随机函数中,之后在“componentDidUpdate(prevProps,prevState)”函数中,我可以访问新的和旧的props值,在那里我可以使用“pageNum”的先前值和当前值:)setState()不会立即改变此.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。无法保证对setState调用的同步操作,并且可能会对调用进行批处理以提高性能。 如前所述,不能保证在下一行代码中更新状态值
如果要检查调试状态,请尝试将其记录到
render
方法中,因为在使用setState更新状态后会调用此方法,因此会合并当前和以前的状态。这就是价值所在。此外,它是同步的,因此可能会产生意外的结果。注意:
setState()
不会立即改变此.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。
无法保证对setState的调用的同步操作,调用可能会成批进行以提高性能。
setState()
将始终触发重新渲染,除非在shouldComponentUpdate()中实现了条件渲染逻辑。如果正在使用可变对象,并且逻辑无法在shouldComponentUpdate()中实现,则仅当新状态与以前的状态不同时调用setState()将避免不必要的重新呈现
您可以从官方文档中获得更多信息
所以基本上你的问题是别人引用了什么。但您也可以轻松地
console.log
执行以下操作:
this.setState({pageNum: this.state.pageNum+1}, () => {
console.log(this.state.pageNum);
})
请参见setState
定义:
void setState(
function|object nextState,
[function callback]
)
代码正在记录
pageNum
,而不是this.state.pageNum
。是的,我的错,我的代码中有“const{pageNum}=this.state;”更高的值:P已修复!如果你不想只为此使用额外的生命周期方法,你应该签出我的答案。是的,你的答案也应该有效,但我的代码要大得多,我还有其他东西需要放在componentDidUpdate()中,所以这是一个更干净的解决方案:)