首页 > 解决方案 > 在异步函数中捕获错误时,useEffect in react 不重新渲染

问题描述

我正在尝试在本地反应中获取用户在博览会中的位置。enableNetworkproviderAsync()提示启用该位置的弹出窗口。当用户拒绝分享他们的位置时,我想重新打开弹出窗口。目前,当我导航到我的地图屏幕时,弹出窗口只打开一次,当我点击不共享我的位置时,它不会重新打开。

const [locationReady, setLocationReady] = useState(false);

  useEffect(() => {
    (async () => {
        if (!locationReady) {
        try {
          const enableLocation = await Location.enableNetworkProviderAsync();
          setLocationReady(true);
        } catch (e) {
          setLocationReady(false);
          console.log("locationReady erorr");
        }
      }
      })();
  }, [locationReady]);

标签: reactjsreact-nativeasynchronousexpouse-effect

解决方案


一旦用户拒绝了权限请求,您将不会再次请求它。您必须要求用户转到设置并允许所需的权限。有两种方法可以做到这一点,

  1. 从'react-native'导入{Linking};然后使用 Linking.openSettings() 打开组件内部的设置。
  2. 或者您可以使用库https://www.npmjs.com/package/react-native-permissions

推荐阅读