Apollo/GraphQL 的光标分页不断给我错误

Posted

技术标签:

【中文标题】Apollo/GraphQL 的光标分页不断给我错误【英文标题】:Cursor Pagination with Apollo/GraphQL keeps giving me error 【发布时间】:2017-10-10 17:48:49 【问题描述】:

我正在尝试实现光标分页并按照文档中的示例进行操作,但我一直收到错误消息,提示 'Cannot query field "cursor" on type "Query"'

我知道“光标”字段实际上并不存在于 Accounts 架构中……但是从我从文档中读取的内容来看……您必须将其包含在 gql`` 查询中的某个位置。此外,不确定我是否遗漏了什么,但我对如何构建查询以允许光标分页有点困惑。

原始查询:(运行它不会出错)

const AccountsQuery = gql`
  query 
    accounts 
      accountName
      accountId
    
  
`;

新查询:(这会出现“无法在帐户上找到光标字段”错误)

const AccountsQuery = gql`
  query Accounts($cursor: String)
    accounts(cursor: $cursor) 
      cursor
      accountName
      accountId
    
  
`;

GraphQL 包装器:

export default graphql(AccountsQuery, 
  props: ( data:  loading, cursor, accounts, fetchmore  ) => (
    loading,
    accounts,
    loadMoreEntries() 
      return fetchmore(
        query: AccountsQuery,
        variables: 
          cursor: cursor,
        ,
        updateQuery: (previousResult,  fetchMoreResult ) => 
          const previousEntry = previousResult.entry;
          const newAccounts = fetchMoreResult.accounts;

          return 
            cursor: fetchMoreResult.cursor,
            entry: 
              accounts: [...newAccounts, ...previousEntry]
            ,
          ;
        ,
      )
    
  )
)(QuickViewContainer);

如果能帮助光标分页正常工作,我们将不胜感激!

【问题讨论】:

我认为您缺少服务器中查询定义上的光标。看起来怎么样? 【参考方案1】:

听起来cursor 字段没有在服务器上实现。你的 Account 类型需要有这样的字段:

Account 
  cursor
  accountName
  accountId

关于如何进行光标分页的约定,您应该遵循标准的 Relay 规范。您可以在符合 Relay 的 GraphQL API 中read more about how it's implemented here。

这将使您的查询看起来像这样:

query 
  viewer 
    allAccounts 
      edges 
        cursor
        node 
          accountName
          accountId
        
      
    
  

每个边缘帐户都有一个对应于节点的游标,并且将使用来自服务器的全局唯一不透明游标 ID 自动填充。

希望这会有所帮助!

【讨论】:

以上是关于Apollo/GraphQL 的光标分页不断给我错误的主要内容,如果未能解决你的问题,请参考以下文章

Apollo GraphQl 分页 - 限制和跳过

Apollo GraphQL 订阅

将 offsetLimitPagination 与过滤 Apollo Graphql 相结合

React Apollo GraphQL 搜索/过滤器

如何将数据从反应组件传递到 Apollo graphql 查询?

Apollo GraphQL 标头在 iOS Swift 中总是失败