React setState不会更新[重复]
Posted
技术标签:
【中文标题】React setState不会更新[重复]【英文标题】:React setState won't update [duplicate] 【发布时间】:2018-02-06 12:12:08 【问题描述】:我正在尝试从 if 语句中设置状态,但它不会这样做。 结果,我需要从可以接收经度和纬度坐标的 if 语句中更新状态,但它不会保存状态。如果我在 if 语句之外的控制台中回显,我将只读取来自 componentWillMount 的第一个 setState 值。那里有什么问题?我在这里做错了什么? 所以这是结构:
componentWillMount()
this.setState(
location:
name: 'Riga'
);
componentDidMount()
if (!!navigator.geolocation)
navigator.geolocation.getCurrentPosition((position) =>
this.setState(
location:
name: 'Sigulda'
);
);
else
alert('ERROR on GEOLOCATION');
console.log(this.state.location);
【问题讨论】:
***.com/questions/41278385/…的可能重复 【参考方案1】:setState
是异步的:
this.setState(
location:
name: 'Sigulda'
, () => console.log(this.state.location));
使用setState
的回调来判断变化
【讨论】:
完美答案.. setState 是异步的,您可以在此处传递回调,如上所示,以防您想使用更新后的状态 谢谢你的解释,解决了我的问题!!! 您可能会遇到其他问题,就像@MayankShukla 已经说过的那样。我不熟悉你geolocation
但你的setState
问题已修复【参考方案2】:
setState
操作是异步的。
setState() 不会立即改变 this.state 而是创建一个 等待状态转换。调用 this 后访问 this.state 方法可能会返回现有值。没有 保证对 setState 的调用和调用的同步操作可能 进行批处理以获得性能提升。
你应该使用setState
回调函数:
this.setState(
location:
name: 'Sigulda'
, () => console.log(this.state.location));
【讨论】:
谢谢你的解释,解决了我的问题!!!以上是关于React setState不会更新[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState。 React 限制嵌套更新的数量以防止无限循环