reactjs - 在异步函数中捕获错误时,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]);
解决方案
一旦用户拒绝了权限请求,您将不会再次请求它。您必须要求用户转到设置并允许所需的权限。有两种方法可以做到这一点,
- 从'react-native'导入{Linking};然后使用 Linking.openSettings() 打开组件内部的设置。
- 或者您可以使用库https://www.npmjs.com/package/react-native-permissions