首页 文章

React setState不会更新[重复]

提问于
浏览
0

这个问题在这里已有答案:

我试图从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);
}

2 回答

  • 3

    setState 动作是异步的 .

    setState()不会立即改变this.state,但会创建挂起状态转换 . 调用此方法后访问this.state可能会返回现有值 . 无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升 .

    你应该使用 setState 回调函数:

    this.setState({
      location: {
        name: 'Sigulda'
      }
    }, () => console.log(this.state.location));
    
  • 4

    setState 是异步的:

    this.setState({
                    location: {
                        name: 'Sigulda'
                    }
                }, () => console.log(this.state.location));
    

    使用 setState 的回调来确定更改

相关问题