Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 反应导航5中的willFocus事件_React Native_React Navigation_React Navigation V5 - Fatal编程技术网

React native 反应导航5中的willFocus事件

React native 反应导航5中的willFocus事件,react-native,react-navigation,react-navigation-v5,React Native,React Navigation,React Navigation V5,我需要在焦点事件之前获取数据。我看到在中有一个willFocus事件,但似乎该事件已在中删除 componentDidMount无法做到这一点,因为我希望在屏幕聚焦之前尽快获取数据每次用户导航到我的屏幕时您可以执行以下操作: /** * Your redux action should set loading-state to false after * fetch-operation is done... */ reduxActionDoingFetch();

我需要在焦点事件之前获取数据。我看到在中有一个willFocus事件,但似乎该事件已在中删除

componentDidMount无法做到这一点,因为我希望在屏幕聚焦之前尽快获取数据每次用户导航到我的屏幕时

您可以执行以下操作:

  /**
   * Your redux action should set loading-state to false after
   * fetch-operation is done...
   */
  reduxActionDoingFetch();

  useEffect(() => {
    if (reduxActionDoingFetch_Loading === false) {
      Navigation.navigate('YourTargetScreen');
    }
  }, [reduxActionDoingFetch_Loading]);

无法在componentDidMount之前获取数据。这实际上是渲染新屏幕时发生的第一件事

关于每次聚焦屏幕时获取数据,您需要使用迁移指南中提到的
focus
事件:

focus
事件相当于之前的
willFocus
。在动画完成之前,它会在屏幕聚焦后立即激发。我不知道你说的是什么意思,太迟了

另外,对于数据获取,还有一个特殊的钩子:
useFocusEffect


这是我当前正在使用的,但事件触发太晚。我想在屏幕聚焦之前获取数据。(每次用户导航到我的屏幕时)它可以工作,但我的数据存储在屏幕组件中,那么我必须使用存储吗?我相信是的。。。例如,我已经演示了使用redux的想法……我所说的太迟是指用户可以看到正在加载的新旧列表之间的转换,这就是为什么我希望在导航到屏幕或使用占位符之前获取数据。最好是在用户不在屏幕上时加载数据,因为我希望避免每次用户聚焦屏幕时显示占位符。因为获取数据需要时间。没有任何事件可以告诉您将来将进行导航,以便您可以更早地获取数据。在进行导航之前,只有您知道,因此您可以获取数据,将其放入全局存储,然后在您调用navigate的位置进行导航。
React.useEffect(() => {
    const unsubscribe = navigation.addListener('focus', () => {
      // do something
    });

    return unsubscribe;
  }, [navigation]);