Reactjs 为什么第一个设置状态总是受影响,而第二个不在react native中?
我在componentDidMount()中使用setState来设置相同变量的状态,但我意识到第一个setState总是受到影响,变量采用第一个setState上定义的值。我希望第二个覆盖第一个,并给变量第二个setState的值。即使我改变顺序,结果也是一样的。为什么会发生这种情况? 确切地说,我说的是纬度和经度变量Reactjs 为什么第一个设置状态总是受影响,而第二个不在react native中?,reactjs,react-native,jsx,Reactjs,React Native,Jsx,我在componentDidMount()中使用setState来设置相同变量的状态,但我意识到第一个setState总是受到影响,变量采用第一个setState上定义的值。我希望第二个覆盖第一个,并给变量第二个setState的值。即使我改变顺序,结果也是一样的。为什么会发生这种情况? 确切地说,我说的是纬度和经度变量 componentDidMount() { fetch('myUrl') .then((response) => response.json()
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将覆盖它
为了解决这个问题,我建议重新构建这个特性的工作方法。异步调用总是在第二秒结束,因此您可能需要切换默认值。请正确设置代码格式,这将使任何试图提供帮助的人更容易阅读和理解。