react-native-amap-geolocation
react-native-amap-geolocation copied to clipboard
watchPosition()成功回调中,使用useState的setState导致无限回调
相关依赖: "react-native": "0.73.3", "react-native-amap-geolocation": "^1.2.3", "react-native-amap3d": "^3.2.4",
问题: 在watchPosition()的回调函数里使用setState会产生无限回调,瞬间达到执行速度上限。
复现方法: 在watchPosition()里使用setState,同样的情况也出现在setInterval()里使用getCurrentPosition()方法,并在内部使用setState。 同时也测试了zustand状态管理,在内部调用zustand store里的设置状态方法也会产生同样的问题。
const [position, setPosition] = useState<point>();
Geolocation.watchPosition(pos => {
setPosition(pos.coords);
console.log(position);
});
但是如果没有setState(或是zudstand的类似设置状态)就是正常的。
日志:
Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}
LOG {"accuracy": 30, "altitude": 0, "altitudeAccuracy": 0, "heading": 0, "latitude": 31.673982, "longitude": 119.576736, "speed": 0}