"リスト"を使用してウィンドウ付きページネーションを実装しようとしています。私は、番号付きのページをユーザーに表示する必要があるため、接続にカーソルベースのソリューションは必要ありません。GraphQL:標準リストのウィンドウ化ページ分割の実装
「ユーザー」と「投稿」オブジェクトがあります。「ユーザー」は「投稿」と1対多の関係にあります。
var userType = new GraphQLObjectType({
name: 'User',
fields:() => ({
id: globalIdField('User'),
posts: {
type: new GraphQLList(postType),
args: {
page:{
type: GraphQLInt,
defaultValue: 0
}
},
resolve: (_, args) => {
//code to return relevant result set
},
},
totalPosts:{
type: GraphQLInt,
resolve:() => {
//code to return total count
}
},
}),
interfaces: [nodeInterface],
});
var postType = new GraphQLObjectType({
name: 'Post',
fields:() => ({
id: globalIdField('Post'),
name: {type: GraphQLString},
//other fields
}),
interfaces: [nodeInterface],
});
"USERTYPE" で "totalPosts" フィールドに注意してください:graphql-jsのスキーマの使用
は、 はここUSERTYPEとpostTypeのための私のスキーマです。同じページングの必要性を持つ、ユーザーのための他のリストが存在することになるので、フラグメントの中にたくさんの "total {Type}"変数を維持するつもりです。これは、リスト結果内のtotalCountを何らかの形で送信できる場合には解決できます。
https://github.com/facebook/graphql/issues/4この問題では、結果セットにtotalCountを含めるためにListにラッパーを実装する方法について説明しています。
私はこのようなラッパーの作成を試みた:
var postList = new GraphQLObjectType({
name: 'PostList',
fields:()=>({
count: {
type: GraphQLInt,
resolve:()=>getPosts().length //this is total count
},
edges: {
type: new GraphQLList(postType),
resolve:() => {
return getPosts() ; // this is results for the page, though I don't know how to use 'page' argument here
},
}
}),
interfaces: [nodeInterface],
});
のが、どのように私はuserType
のposts
フィールドにこれを接続する必要がありますか?そして、元のuserTypeのように、このラッパーで 'ページ'引数を使用するにはどうすればいいですか?
ありがとうございます!出来た。インターフェイスを削除する必要がありました:[nodeInterface]、postListラッパー – sanandrl
からあなたはそれが有用であることをうれしく思っています。あなたのフィードバックに基づいて、 'post'ラッパーから' interfaces'フィールドを削除します。ありがとう! –