【问题标题】:Why is my function not working everytime I open the screen?为什么每次打开屏幕我的功能都不起作用?
【发布时间】:2021-01-21 16:51:44
【问题描述】:

我想在每次打开屏幕时检查是否有一个存储值连接到“amazonAddressKey”,但它并不总是有效。

 const [isLoaded, setIsLoaded] = React.useState(false);

  React.useEffect(() => {
    saveAmazonVisibility();
  }, []);

  const [amazonVisibility, setAmazonVisibility] = React.useState();
  async function saveAmazonVisibility() {
    const amazonGetKey = await SecureStore.getItemAsync("amazonAddressKey");
    if (JSON.parse(amazonGetKey)) {
      setAmazonVisibility(true);
      console.log(JSON.parse(amazonGetKey));
    } else {
      setAmazonVisibility(false);
      console.log(JSON.parse(amazonGetKey));
    }
    setIsLoaded(true);
  }

【问题讨论】:

  • 当你说'它不起作用'时,'它'到底是什么
  • 这很可能是您正在使用 react-navigation 并且您希望每次都安装该组件。如果是这样,您必须使用 focus 侦听器来运行您的函数。
  • 谢谢@IanVasco!这就是我一直在寻找的。我在想 useEffect() 正在做这项工作。

标签: reactjs react-native react-hooks expo use-effect


【解决方案1】:

你可以使用“useFocusEffect”,这样你就可以在每次页面获得焦点时调用一个函数,这里是一个例子:

 React.useEffect(() => {
    const unsubscribe = navigation.addListener('focus', () => {
      // The screen is focused
      // Call any action
     saveAmazonVisibility();
    });

    // Return the function to unsubscribe from the event so it gets removed on unmount
    return unsubscribe;
  }, [navigation]);

您可以在此处阅读有关此钩子的信息: https://reactnavigation.org/docs/function-after-focusing-screen/

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2023-03-29
    • 2015-01-02
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多