2

私が知る限り、変数が変更されているとき、リレーはクエリの nodeDefitions に依存しています。

id フィールドを持つすべてのオブジェクトが有効なノードであるように見えます。ただし、次のようなデータがある場合:

type User {
  id: globalIdField('User'),
  name: String,
  folders: [ Folder ]
}
type Folder {
  id: ???,
  ...
}

データはドキュメント ベースのソリューションに格納され、Folder オブジェクトは User オブジェクトにネストされます。ただし、Folder オブジェクトには ID が与えられているため、他のオブジェクトが User のコンテキストで Folder オブジェクトを参照できます。

Folder が nodeInterface を実装し、globalIdField を使用する場合、globalId から Folder オブジェクトをフェッチする方法を見つける必要があります。オブジェクトを見つけるか、データを正規化して、フォルダが独自のテーブルにあるようにします。nodeInterface を実装せず、id フィールドとして文字列を使用するだけの場合、Folder オブジェクトのいくつかのフィールドを変更しようとするとどうなりますか?

4

1 に答える 1

2

データベースに実際の ID が直接存在しない場合でも、これらのオブジェクトに ID があると便利なことがよくあります。たとえば、フォルダーの名前を変更するミューテーションを作成する場合、このフォルダーを参照するためのグローバル ID があると便利です。Relay は、まだロードされていないノードで UI が追加データを要求するときにも、それらを内部的に使用します。

フォルダーのグローバル ID を生成する 1 つの方法は、プレフィックスを取得してユーザー ID を追加し、ユーザー内でフォルダーを識別する方法を追加することです。次に例を示します。

var folderID = ['folder', userID, folderID].join(':');

サーバーでこの id を解決したいときはいつでも、 で分割し:、最初の部分を見てフォルダーをロードしたいことを確認し、ユーザー経由で適切なフォルダーに移動します。

于 2015-09-21T03:04:15.480 に答える