让我们假设以下简单情况:
我们有两个屏幕,A和B。我们正在从屏幕A导航到屏幕B。React Navigation发出B的willFocus
事件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事件我希望第一次指示someFunc不会运行,因为在我们指示屏幕A导航到屏幕B时会发出该事件,因此尚未设置B的侦听器。
在React中,首先调用子级的componentDidMount / componentDidUpdate,然后调用父级的componentDidMount / componentDidUpdate。因为直到孩子完成更新,父母才能完成更新。
因此,当父级完成更新并发出事件时,子级已经安装并添加了侦听器。