何时会发出willFocus事件? (反应导航)

问题描述 投票:2回答:1

让我们假设以下简单情况:

我们有两个屏幕,AB。我们正在从屏幕A导航到屏幕B。React Navigation发出BwillFocus

事件
class B extends React.Component (

    componentDidMount(){
        fetchServerData() // fetches some data
    }

    render(){
      <View>
        <NavigationEvents
          onWillFocus={someFunc}
        />
      </View>
    );
}

我已经注意到someFunc仍然会运行,但是这让我想知道,什么时候从React Navigation发出willFocus事件?我希望第一次<< someFunc不会运行,因为在我们指示屏幕A导航到屏幕B并因此指示B的侦听器时会发出事件尚未设置。

这也将服务于我(并且我想象很多其他人)的用例,就像当前实现一样,

fetchServerData

将运行两次。这迫使我在渲染NavigationEvents时增加了延迟,否则我将面临两次被提取的数据。对此有何见解?


编辑:到目前为止,我一直在将loading

状态prop设置为false之后渲染NavigationEvents,到那时已经足够迟了,无法设置willFocus侦听器,但令我感到困惑的是,文档未描述何时发出willFocus事件
react-native react-navigation
1个回答
0
投票
[导航事件在父级导航器状态更新时发出。

我希望第一次指示someFunc不会运行,因为在我们指示屏幕A导航到屏幕B时会发出该事件,因此尚未设置B的侦听器。

在React中,首先调用子级的componentDidMount / componentDidUpdate,然后调用父级的componentDidMount / componentDidUpdate。因为直到孩子完成更新,父母才能完成更新。

因此,当父级完成更新并发出事件时,子级已经安装并添加了侦听器。

© www.soinside.com 2019 - 2024. All rights reserved.