サイトアイコン CCcamp

【 React Navigation 】「Back」ボタンで戻ったときにデータを更新する方法

【React Navigation】「 Back」ボタンで戻ったときにデータを更新する方法
この記事の対象者

・React Native もしくは EXPO でアプリを開発してる。

・React Navigationを使用してアプリの画面遷移機能を構築してる。

・画面のA→BでB画面でデータを更新したがAに戻ってきても画面が更新されておらず困っている

この記事でわかること

画面のA→BでB画面でデータを更新しA画面に戻ったときにデータを更新できるスマートなコードが書けるようになる

スポンサーリンク

React Navigation のインストール〜使い方

React Navigationのインストールから基本的な使い方が知りたいかたは↓の記事をまず参考にしてください

スポンサーリンク

React Navigation の「Back」ボタンで戻ったときに困りがちなこと

React Navigationのヘッダーに表示される「Back」ボタンやnavigation.goback()により前のページに戻っても再レンダリングが行われません。

具体的にどういうことか?最近私がリリースを諦めた(泣)「ヤクアシ」アプリの画面で解説します。

1,画面Aには患者さんのリストがあり患者名をタップすると画面Bに移動します。

2,画面Bでは薬の監査が終了したので左上の「戻る」ボタンを使用します。

3、画面が戻ったときには画面A’のように”田中 太郎”さんの状態が”済”になっていてほしいですが、再レンダリングされないため画面Aが表示されてしまいます。

画面A

画面B

画面A’

スポンサーリンク

navigation.addListener()を使用し問題の画面に注目されたらデータが更新されるようにする。

コードはとてもシンプルです。

navigation.addListener()の第一引数に'focus'を指定するとその画面が表示されたときに発火し第二引数で書かれた処理を実行してくれます。

つまり画面Aで下記のコードを書いておけば、画面Bから戻ったときにnavigation.addListener()が発火するため画面A’へ更新されるようになります。

useEffect(() => {
    const willFocusSubscription = navigation.addListener('focus', () => {
      // データを更新する処理をココに書く
    });
    return willFocusSubscription;
  }, []);

参考サイト

[React Navigation] Navigation events

モバイルバージョンを終了