0

私はgraphqlを使用して非常に単純なスキーマを書いていますが、エッジのすべてのIDが同じです。

{
    "data": {
        "imageList": {
            "id": "SW1hZ2VMaXN0Og==",
            "images": {
                "edges": [
                  {
                      "node": {
                          "id": "SW1hZ2U6",
                          "url": "1.jpg"
                      }
                  },
                  {
                      "node": {
                          "id": "SW1hZ2U6",
                          "url": "2.jpg"
                      }
                  },
                  {
                      "node": {
                          "id": "SW1hZ2U6",
                          "url": "3.jpg"
                      }
                  }
                ]
            }
        }
    }
}

特定の詳細を github に投稿しました。ここにリンクがあります。

4

2 に答える 2

7

そのため、globalIdField は、オブジェクトに「id」という名前のフィールドがあることを期待しています。次に、globalIdField に渡した文字列を取得し、「:」とオブジェクトの ID を追加して、グローバルに一意の ID を作成します。

オブジェクトに正確に「id」と呼ばれるフィールドがない場合、それは追加されず、すべての globalIdField は、渡した文字列と「:」になります。したがって、それらは一意ではなく、すべて同じになります。

globalIdField に渡すことができる 2 番目のパラメーターがあります。これは、オブジェクトを取得し、使用する globalIdField の ID を返す関数です。オブジェクトの id フィールドが実際には '_id' と呼ばれているとしましょう (Mongo に感謝!)。次のように globalIdField を呼び出します。

id: globalIdField('Image', image => image._id)

ほらね。リレーを楽しむためのユニークなID。

これは、graphql-relay-js の関連するソースコードへのリンクです: https://github.com/graphql/graphql-relay-js/blob/master/src/node/node.js#L110

于 2016-01-06T00:53:13.537 に答える
0

次のコードをブラウザ コンソールに貼り付けます

atob('SW1hZ2U6')

id の値が「Image:」であることがわかります。

これは、取得したレコードのすべての id プロパティ(new MyImages()).getAll() が null であることを意味します。

ユニオンIDを返すか、画像をGraphQLListとして定義することをお勧めします

var ImageListType = new GraphQL.GraphQLObjectType({
  name: 'ImageList',
  description: 'A list of images',
  fields: () => ({
    id: Relay.globalIdField('ImageList'),
    images: {
      type: new GraphQLList(ImageType),
      description: 'A collection of images',
      args: Relay.connectionArgs,
      resolve: (_, args) => Relay.connectionFromPromisedArray(
        (new MyImages()).getAll(),
        args
      ),
    },
  }),
  interfaces: [nodeDefinition.nodeInterface],
});
于 2015-12-26T12:07:36.727 に答える