React Nativeで複数画面の共通変数管理


ReactNativeで複数画面間の共通変数を扱うことを考える。

共通の定数ならグローバルで用意して読み込めばいいけど変数は少し厄介だった。

複数画面の管理はReact Navigation、設定保存などにはAsyncStorageを使う。

React Native 0.60 Expo v34 react-navigation 3.12.0

グローバル変数を使う

参照はグローバル定義から行う。

テーマカラーを共通変数として管理します。

 

設定用関数を作りつつファイル読み込み時にグローバル変数を設定する。

 

また設定する関数も作っておく。

 

グローバル変数を変えても再描写は行われないためどこかで再描写する必要がある。

react-navigationを使っているのでフォーカスが合うたびに再描画されるようにwillFocusイベントを使う。

非推奨ではあるけどforceUpdate()で強制再描画する。

問題点

とにかく管理がめんどくさい。

必要のない再描画が入る、またタイミングの問題か若干不安定な描画になった。

screenPropで管理する

React Navigationを改造してプロパティーを渡す。

screenPropを通して各スクリーンに値渡しが可能です。

Screen側ではthis.props.screenPropsでアクセスできる。

this.props.screenProps.setTheme()で変更した場合全てのスクリーンが再描画。

設定画面ではAsyncStorageの管理とこの関数呼び出しだけ。だいぶ楽になった。

 

そもそもReduxで集中管理すれば楽になる気がする。また1から使ってみるか。


コメントを残す

メールアドレスが公開されることはありません。