2017-10-13 9 views
1

私はReact Nativeを使用してライブチャットアプリを作成しています。 メイン画面のチャットチャンネルリストに<FlatList>を使用していますが、画面間のナビゲーションにはStackNavigatorを使用しています。 私は<FlatList>がバックエンドからデータを再取得させ、ユーザーがメイン画面に戻るたびに再レンダリングさせようとしています。React Nativeの現在の画面に表示されるたびにFlatListを積極的にリフレッシュする方法は?

ユーザーはチャットチャンネルを入力し、チャットの詳細画面に移動し、そこにメッセージを送信します。ユーザーが戻るボタンを押してメインのチャットチャンネルリスト画面に戻ると、 <FlatList>はバックエンドから再解析し、最新のデータを表示するために再レンダリングする必要があります。 (最新のチャンネルをトップに並べ替えるなど)

今すぐリフレッシュを実行するが実装されているが、問題はユーザーがメイン画面に戻ったことをどのようにして知っているのか、また、<FlatList>発生します。だから

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

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> 
 
) 
 
}

答えて

0

あなたはChatDetails画面に移動するときには、ナビゲーションのparamとしてコールバックを渡すことができます。ここでは

は、私のコードの一部でありますconsole.log()の代わりに、あなたのfetch()かあなたのやりたいことをしてください。

関連する問題