Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript if语句中的setState()出现问题_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 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:

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: 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()中,所以这是一个更干净的解决方案:)