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不会更新[重复]的主要内容,如果未能解决你的问题,请参考以下文章

setState 不会更新 React 中的子级

setState 不会立即更新状态[重复]

在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState。 React 限制嵌套更新的数量以防止无限循环

React setState注意事项

React Native - Redux 不会立即更新

React:setState 不会导致重新渲染?