Reactjs 为什么第一个设置状态总是受影响,而第二个不在react native中?

Reactjs 为什么第一个设置状态总是受影响,而第二个不在react native中?,reactjs,react-native,jsx,Reactjs,React Native,Jsx,我在componentDidMount()中使用setState来设置相同变量的状态,但我意识到第一个setState总是受到影响,变量采用第一个setState上定义的值。我希望第二个覆盖第一个,并给变量第二个setState的值。即使我改变顺序,结果也是一样的。为什么会发生这种情况? 确切地说,我说的是纬度和经度变量 componentDidMount() { fetch('myUrl') .then((response) => response.json()

我在componentDidMount()中使用setState来设置相同变量的状态,但我意识到第一个setState总是受到影响,变量采用第一个setState上定义的值。我希望第二个覆盖第一个,并给变量第二个setState的值。即使我改变顺序,结果也是一样的。为什么会发生这种情况? 确切地说,我说的是纬度和经度变量

  componentDidMount() {

    fetch('myUrl')
      .then((response) => response.json())
      .then((responseJson) => {
        Geocoder.setApiKey('myUrl');
        Geocoder.getFromLocation(responseJson.comune_nascita).then(
          json => {
            var location = json.results[0].geometry.location;
            this.setState({
              Load:false,
              latitude:location.lat,
              longitude:location.lng
            })

          },

            error => {
              alert(error);
            }
          );
      })

      .catch((error) => {
        console.log(error)
      });


        navigator.geolocation.getCurrentPosition(position => {
        this.setState({
          latitude: position.coords.latitude,
          longitude: position.coords.longitude,
          error: null,
        });
      },
        error => this.setState({ error: error.message }),
        { enableHighAccurancy: false, timeout: 2000, maximumage: 2000 }
      );
   }

您的问题似乎表明“first setState”是在fetch请求中调用的setState,“second setState”是在navigator的getCurrentPosition方法中调用的setState。根据这一点,我有一些答案和建议

这是由于您的代码是异步的。正如您所看到的,fetch被调用,然后一旦完成它将把状态设置为无论纬度和经度是什么。第二个调用不是异步调用,它在调用componentDidMount后立即被调用

本质上,第二个setState调用实际上是在组件装载时首先被调用,然后在获取完成后第一个setState将覆盖它


为了解决这个问题,我建议重新构建这个特性的工作方法。异步调用总是在第二秒结束,因此您可能需要切换默认值。

请正确设置代码格式,这将使任何试图提供帮助的人更容易阅读和理解。