react-native-amap-geolocation icon indicating copy to clipboard operation
react-native-amap-geolocation copied to clipboard

watchPosition()成功回调中,使用useState的setState导致无限回调

Open Taz-dingo opened this issue 10 months ago • 0 comments

相关依赖: "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}

Taz-dingo avatar Mar 26 '24 10:03 Taz-dingo