オフラインでの使用にRelayとRealmDBを使用する制作アプリがあります。 CacheManagerは当時まだ準備が整っていなかったので、CacheManagerとは別のアプローチをとった。これにはrelay-local-schemaを使用しました。
relay-local-schemaを使用してモバイルに必要なスキーマ全体を定義しました。これは、バックエンドサーバがgraphqlスキーマを定義するために使用するものと同じファイルであり、resolve関数を変更してrealm dbからデータを解決することができます。このため、realmdbにバックエンドサーバーから返されたデータを簡単に書き込むために、graphqlスキーマとほぼ同じ構造を持つrealmdbにスキーマを作成しました。また、graphqlイントロスペクションクエリを使用してこのスキーマの生成を自動化することもできます。私たちはcustom network layerを定義しました。ここでは、すべてのリレークエリが常にローカルデータベースに接触するようにしました。 sendQueries
機能では、すべてのクエリが解決され、非常に高速に解決されるrelay-local-schemaが使用され、ビューには古いデータが表示され、同時に、sendQueries
機能の各要求に対してネットワーク要求が行われます。ネットワーク要求からデータを受信すると、それはrealmdbに書き込まれ、Relayのメモリ内にも新しいデータが格納されます。これにより、データが変更されたすべての反応ビューが自動的にリフレッシュされます。メモリ内の店舗を中継するデータを書き込むために、我々は、以下の文書化されていないメソッドを使用
Relay.Store.getStoreData().handleQueryPayload(query, response);
あなたはrequest.getQuery()
を使用してsendQueries機能で受信リクエストからクエリオブジェクトを取得することができます。
私たちの現在の実装は、私たちのビジネスロジックと結びついているため、このロジックをオープンソース化することは困難です。私はデモアプリを提供しようとするつもりですが可能です。
@meteorsにお返事ありがとうございます。 私はrelay-local-schemaを使うことを考えましたが、私のアプリで 'GraphQLSchema'をインポートするのが気に入らなかったので諦めました(スキーマは分離したプロジェクトで定義されています。それを結ぶ)。あなたの回答の後、[json-to-graphql-schema](https://github.com/aweary/json-to-graphql)リポジトリが見つかりました。私はbabel-relay-pluginで使用されているjsonスキーマを使用しようとします。 –
あなたの実装を見てうれしいです。 ビジネスロジックとコードを分けてデモでリポジトリを作成するのは難しいかもしれないので、カスタムネットワークレイヤーのサンプルコードとRealmDBの更新を使って要点を作成できたらと思います。コードは= Dで動く必要はありません。 とにかく、ローカルスキーマを使ってアプローチを試してみましょう。私はいくつかの進歩を得るときにここで更新します。 –
さて、すぐに要点やデモアプリを追加しようとします。 – meteors