以下代码段。
输入UserFriendsConnection { pageInfo:PageInfo! 边缘:[UserFriendsEdge] totalCount:Int}
我的问题是,是否可以将任意元数据放在上面 边缘 </跨度> 还 } 角色&lt; — HERE } } } 角色&lt; — HERE } } }}
#响应
{ “ 数据 </跨度> “:{ “我
连接是其中的一部分 继电器规格 。中继本身是一个GraphQL客户端,尽管您可以拥有一个符合Relay标准的GraphQL服务器,但不会在前端实际使用Relay。根据规格:
边缘类型必须包含名为node和cursor的字段。如模式设计者认为的那样,它们可能具有与边缘相关的其他字段。
在这些类型上看到其他字段是很常见的,这当然是有道理的。但要提醒一句。如果我们有 User 类型,我们可能会创建一个 UserConnection 和a UserEdge :
User
UserConnection
UserEdge
type UserConnection { pageInfo: PageInfo! egdes: [UserEdge!]! } type UserEdge { cursor: String! edge: User! }
然后我们可以在各种地方使用该连接类型......
type Query { allUsers: UserConnection! # other fields } type Group { members: UserConnection! # other fields } type User { coworkers: UserConnection! # other fields }
但是,如果添加类似的字段 role 至 UserEdge ,那个领域只有在这个领域才有意义 members 在球场上 Group 类型。它必须在所有其他上下文中返回null或一些虚拟值,这可能引入不必要的混淆。
role
members
Group
这意味着,如果您要在边缘类型上引入与关系相关的额外字段,则应该创建特定于该关系的连接和边缘类型:
type GroupUserConnection { pageInfo: PageInfo! egdes: [GroupUserEdge!]! } type GroupUserEdge { cursor: String! edge: User! role: Role! }
这样,您仍然可以使用常规 UserConnection 对于其他领域,避免客户不必要地请求 role 哪里没有一个。