前回の同期の話を考えたときに、どうのようにクライアントのローカルにデータを保存するのかという問題が出てきます。私が調べた限り、その方法は下記のようになります。Memroyは超高速ですが、容量を気にする必要があります。ReduxのStoreで管理ReduxのStoreをredux-persistなどを使いAsyncStorageにダンプすること前提です。いい意味でも悪い意味でも自分で管理する必要が出てきます。具体的には、Storeに保存するデータの構造を自前で考える必要があるデータを取り出すFind、整列のsortのようなメソッドを自前で作る必要がある。自分でデータ構造を変えたときに、すべて書きなおすことになり修羅の道。データ量が少なく単純な構造のときはReduxのStoreで管理しても問題ないでしょう。AsyncStorageを直接扱うオフィシャルのDocumentでも直に使うのは推奨されてません。“ReduxのStoreで管理”と同様に自前で作ることですが、それに増してStorageを扱うので処理が遅いことです。この方法にすることは基本的にないでしょう。AsyncStorageのラッパーを使うreact-native-store以外にもいくつか同じようなモジュールを見かけました。Findのような関数が付属するので自前でメソッドを書く必要がありません。唯一の欠点は、速度だと思います。issueでもperformanceが問題になっていました。データ量が増えるとパフォーマンス的に結構厳しそうです。AsyncStorageのAPIをプラットフォームが提供すれば、どこでも使えることは選択する上で大事なポイントです。Native(sqlite)のデータベースを使うiOSやAndroidはsqliteのデータベースが付属しています。このsqliteをブリッジするモジュールを使います。sqliteはメモリ上で動くので高速ですし、メソッド等すべてネイティブですし、最速だと思います。Nativeポートです。これは、iOSとAndroid両方同じAPIでSQLiteを叩けるものです。Nativeコードのラッパーなので、将来、react-native-macosやreact-native-web、もしくは他プラットフォームが出てきたときに、コードの再利用が他のプラットフォームでできなくなってしまい、その場でreact-native-sqlite-storageのプラットフォームサポートを待つか自分で抽象クラスみたいなものを実装しなければいけないかもしれません。プラットフォームのターゲットが決まっている場合は、これを選択すべきでしょう。Nativeの利点(メモリ管理など)を思う存分享受できるでしょう。databaseを使うnodeの世界には、javascriptで実装されたdatabaseというものがあります。MongoDBの簡略版のNeDBです。Nativeにはreact-native-local-mongodbというNodeモジュールからポートされたモジュールがあります。Memoryで動き、AsyncStorageにPersistすることもできます。Redisみたなものと想像すれば良いでしょうか。逐次AsyncStorageに書き出すのではなく、あるタイミングで書き出します。したがって、データを失う可能性がないとは言えません。流用性と速度を気にしている場合は選択肢に入ると思いますが、データロスを気にするアプリやメモリの量を気にする場合は避けた方がいいかもしれせん。この辺の書き方については、概ねReactを踏襲しているので、Reactを勉強するのが近道かもしれません。Qiitaとかがわかりやすいですね。Nativeそのものが吸収してくれるハードウェアの違いは主としてUI部品に関して(しかもその一部だけ)なので、データの永続化のやり方などについては別途考察が必要になります。Labという記事もありますね。