无法在反应中继中获取列表

我正在遵循这里提到的相同的架构

我想要获取所有用户,所以我更新了我的模式

var Root = new GraphQLObjectType({ name: 'Root', fields: () => ({ user: { type: userType, resolve: (rootValue, _) => { return getUser(rootValue) } }, post: { type: postType, args: { ...connectionArgs, postID: {type: GraphQLString} }, resolve: (rootValue, args) => { return getPost(args.postID).then(function(data){ return data[0]; }).then(null,function(err){ return err; }); } }, users:{ type: new GraphQLList(userType), resolve: (root) =>getUsers(), }, }) }); 

并在database.js

 export function getUsers(params) { console.log("getUsers",params) return new Promise((resolve, reject) => { User.find({}).exec({}, function(err, users) { if (err) { resolve({}) } else { resolve(users) } }); }) } 

我在/ graphql中得到结果

 { users { id, fullName } } 

结果如下

 { "data": { "users": [ { "id": "VXNlcjo1Nzk4NWQxNmIwYWYxYWY2MTc3MGJlNTA=", "fullName": "Akshay" }, { "id": "VXNlcjo1Nzk4YTRkNTBjMWJlZTg1MzFmN2IzMzI=", "fullName": "jitendra" }, { "id": "VXNlcjo1NzliNjcyMmRlNjRlZTI2MTFkMWEyMTk=", "fullName": "akshay1" }, { "id": "VXNlcjo1NzliNjgwMDc4YTYwMTZjMTM0ZmMxZWM=", "fullName": "Akshay2" }, { "id": "VXNlcjo1NzlmMTNkYjMzNTNkODQ0MmJjOWQzZDU=", "fullName": "test" } ] } } 

但如果我试图把这个视为

 export default Relay.createContainer(UserList, { fragments: { userslist: () => Relay.QL` fragment on User @relay(plural: true) { fullName, local{ email }, images{ full }, currentPostCount, isPremium, } `, }, }); 

我收到错误Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings. Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.

请告诉我我错过了什么。 我试了很多,没有@relay(复数:真)。 还试图用参数更新架构

  users:{ type: new GraphQLList(userType), args: { names: { type: GraphQLString, }, ...connectionArgs, }, resolve: (root, {names}) =>connectionFromArray(getUsers(names)), }, 

但我得到错误Cannot read property 'after' of undefined in implementing react-relay在此先感谢。

中继目前只支持三种types的根字段(见facebook / relay#112 ):

  • 不带参数的根域,返回单个节点:
    • 例如{ user { id } }返回{"id": "123"}
  • 具有一个参数的根域,返回单个节点:
    • 例如{ post(id: "456") { id } }返回{"id": "456"}
  • 具有一个数组参数的根域返回与参数数组(也称为“复数标识根域”)相同大小的节点数组:
    • 例如{ users(ids: ["123", "321"]) { id } }返回[{"id": "123"}, {"id": "321"}]

解决方法是创build一个根域(通常称为viewer ),返回具有这些域的节点。 当嵌套在Viewer (或任何其他节点)内时,允许字段具有任何返回types,包括列表或连接。 当你在GraphQL服务器中包装这个对象中的字段时,你可以像这样查询它们:

 { viewer { users { id, fullName, } } } 

Viewertypes是一个节点types,因为它只有一个实例,所以它的id应该是一个常量。 您可以使用globalIdField助手来定义id字段,并添加您想要用Relay进行查询的任何其他字段:

 const viewerType = new GraphQLObjectType({ name: 'Viewer', interfaces: [nodeInterface], fields: { id: globalIdField('Viewer', () => 'VIEWER_ID'), users:{ type: new GraphQLList(userType), resolve: (viewer) => getUsers(), }, }, }); 

在客户端上,您需要将路由中的根查询更改为{ viewer }并在Viewer上定义片段:

 export default Relay.createContainer(UserList, { fragments: { viewer: () => Relay.QL` fragment on Viewer { users { fullName, local { email, }, images { full, }, currentPostCount, isPremium, } } `, }, });