如何在React Native的当前屏幕上显示时主动刷新FlatList?

我正在使用React Native创build一个实时聊天应用程序。 我在主屏幕上使用<FlatList>作为聊天频道列表,并使用StackNavigator在屏幕之间进行导航。 现在,我试图让<FlatList>从后端重新获取数据,并在用户导航回到主屏幕时重新提交数据。

一个例子是用户进入聊天频道,应用程序导航到聊天细节屏幕,用户在那里发送一些消息,当用户按下后退button并导航回到主聊天频道列表屏幕时, <FlatList>应该从后端重新展现,重新展现最新的数据。 (将最近的频道重新排列在最上面等等)

现在拉刷新实施,但问题是我怎么知道用户已导航回到主屏幕,以及如何积极调用刷新<FlatList>发生时。

这是我的一些代码:

  onRefresh = async () => { const { data } = this.props try { this.setState({ refreshing: true }) await data.refetch({ page: 1 }) } catch (e) { // todo } finally { this.setState({ refreshing: false, }) } } const NudgeList = ({ nudges, loading, refreshing, onRefresh, }) => { let inner if (loading && !refreshing && !fetchingMore) { inner = ( <View style={styles.center}> <ActivityIndicator animating /> </View> ) } else { inner = ( <FlatList onRefresh={onRefresh} refreshing={refreshing || false} scrollEventThrottle={400} data={nudges} renderItem={({ item }) => ( <NudgeCard nudge={item} {...{ onOpenNudge }} /> )} /> ) } return ( <View style={styles.container}> {inner} </View> ) } 

当您导航到ChatDetails屏幕时,您可以将callback作为导航parameter passing:

 this.props.navigation.navigate( 'ChatDetails', { onGoBack: () => console.log('Will go back from ChatDetails'), } ); 

所以,而不是console.log() ,做你的fetch()或/和任何你想要的。