Typesafe Updaters FAQ
一般
Typesafe updatersとは?
Typesafe updatersは、Relayストア内のデータを命令的に更新するための既存のAPIに代わる、型安全で人間工学的な代替手段を提供するプロジェクトの名前です。
なぜ?
Relayは、サーバーで発生したデータを取得および管理するための型安全で人間工学的なAPIを提供します。さらに、Relayは、**クライアントスキーマ拡張**でローカルのみのフィールドを定義する機能を提供します。ただし、これらのフィールドのデータを変更するためのAPIは、これまで冗長で人間工学的ではなく、ローカル状態を管理するためのソリューションとしてRelayを推奨できませんでした。
既存のAPIの何が問題だったのですか?
既存のAPIは冗長で型安全ではありません。さまざまな間違いを犯しやすく、開発者がアップデーターを作成するときにのみ新しいAPIセットを理解する必要があります。
Typesafe updatersは、型安全で(うまくいけば)より人間工学的なAPIのセットです。これらは、よく知られたRelayイディオム(クエリ、フラグメント、型リファインメント)を活用し、開発者が他の場所で使用されていないメソッドのセットについて学習する必要がない代わりに、ゲッターとセッターを使用します。
開発者はtypesafe updatersをどのように使用しますか?
Typesafe updatersを使用すると、開発者は命令的に更新するデータを指定する更新可能なクエリまたはフラグメントを作成します。次に、開発者はそのデータをストアから読み出し、いわゆる**更新可能なプロキシ**を返します。次に、開発者はその更新可能なプロキシを変更します。セッター(例えば、updatableData.name = "Godzilla"
)を使用してその更新可能なプロキシを変更すると、古いAPIが呼び出されますが、型安全性が追加されます。
これらに_EXPERIMENTAL
というラベルが付いているのはなぜですか?
これらは事実上実験的なものではありません。新しいコードを書くときは、これらを使用することをお勧めします!この接尾辞はまもなく削除されます。
更新可能なクエリまたはフラグメントとは何ですか?
更新可能なクエリまたはフラグメントとは、@updatable
ディレクティブを持つクエリまたはフラグメントのことです。
更新可能なクエリとフラグメントはフェッチされません
更新可能なクエリとフラグメントで選択されたフィールドはサーバーからフェッチされますか?
いいえ!サーバーは更新可能なクエリとフラグメントについて知りません。それらのフィールドは決してフェッチされません。
更新可能なフラグメントを通常のクエリまたはフラグメントに展開した場合でも、その更新可能なフラグメントで選択されたフィールドはそのリクエストの一部としてフェッチされません。
フィールドをフェッチして変更したい場合はどうすればよいですか?
通常のクエリ/フラグメント**と**更新可能なクエリ/フラグメントの両方でそのフィールドを選択する必要があります。
この結果として起こることは何ですか?
- 更新可能なデータを読み出すと、ストアに存在しない場合、データが欠落している可能性があります。
- 更新可能なクエリ/フラグメントで通常のフラグメントを展開することはできません。
- 更新可能なクエリ/フラグメント用に生成されたアーティファクトには、クエリIDが含まれておらず、正規化AST(ネットワークデータをストアに書き込むために使用される)が含まれていません。
@defer
などのディレクティブは、このコンテキストでは意味をなさず、許可されていません。
その他
store
はどこで入手できますか?
クラスRelayRecordSourceSelectorProxy
とRelayRecordSourceProxy
には、メソッドreadUpdatableQuery
とreadUpdatableFragment
が含まれています。これらのクラスのインスタンスは取得できます。
- ミューテーションとサブスクリプションのアップデーター内
- ミューテーションの楽観的なアップデーター内
RelayModernEnvironment
のcommitUpdate
、applyUpdate
などのメソッドを使用する場合。- スタンドアロンの
commitLocalUpdate
メソッドを使用する場合。