【问题标题】:React setState won't update [duplicate]React setState不会更新[重复]
【发布时间】: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);
}

【问题讨论】:

标签: javascript reactjs setstate


【解决方案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));

【讨论】:

  • 谢谢你的解释,解决了我的问题!!!
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2021-01-15
  • 2018-08-12
  • 2018-06-26
  • 2022-01-16
  • 1970-01-01
  • 2019-06-14
相关资源
最近更新 更多