根据状态变量运行 useEffect 钩子的正确方法是什么?

时间:2021-06-14 18:33:14

标签: javascript reactjs react-native use-effect

我正在编写一个相机应用。因此,当用户进入相机页面时,他们可以选择是否授予相机权限。我将他们的决定保存在变量 const [hasPermission, setHasPermission] = useState(null); 我当前的使用效果函数中:

useEffect(() => {
    (async () => {
      const { status } = await Camera.requestPermissionsAsync();
      const audioPermissions = await Audio.requestPermissionsAsync();
      if (
        cameraPermissions.status === "granted" &&
        audioPermissions.status === "granted"
      ) {
        setHasPermission(true);
      }
    })();
  }, []);

当用户第一次运行应用程序时,这目前可以正常工作 - 他们授予权限,就是这样 - 我可以使用相机!

但是..... 如果他们不授予许可怎么办。他们决定不使用摄像头,他们拒绝访问,后来又改变主意。例如 5 分钟后,他们再次打开“摄像头”页面并想要授予权限。这是我的问题。在当前情况下useEffect,即当您最初加载页面时,使用摄像头的请求只会显示一次。如果用户还没有授予权限,我如何强制它再次弹出?

我尝试了以下方法:

useEffect(() => {
    (async () => {
      const { status } = await Camera.requestPermissionsAsync();
      const audioPermissions = await Audio.requestPermissionsAsync();
      if (
        cameraPermissions.status === "granted" &&
        audioPermissions.status === "granted"
      ) {
        setHasPermission(true);
      }
    })();
  }, [hasPermission === null]);

但是没有用。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您只需要传递重要的变量。无需检查任何其他内容。

  }, [hasPermission]);