React setState 不会更新

San*_*som 0 javascript setstate reactjs

我正在尝试从 if 语句中设置状态,但它不会这样做。结果我需要从 if 语句中更新状态,在那里我可以接收经度和纬度坐标,但它不会保存状态。如果我在 if 语句之外的控制台中回显,我将只读取第一个 setState 值表单 componentWillMount。那里有什么问题?我在这里做错了什么?所以这里是结构:

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);
}
Run Code Online (Sandbox Code Playgroud)

Iva*_*kov 5

setState 动作是异步的。

setState() 不会立即改变 this.state 而是创建一个挂起的状态转换。调用此方法后访问 this.state 可能会返回现有值。无法保证对 setState 调用的同步操作,并且可能会批量调用以提高性能。

您应该使用setState回调函数:

this.setState({
  location: {
    name: 'Sigulda'
  }
}, () => console.log(this.state.location));
Run Code Online (Sandbox Code Playgroud)