查询可与useQ​​uery挂钩一起使用,但不适用于ApolloClient实例

时间:2020-03-04 19:02:43

标签: apollo react-apollo apollo-client

我遇到了一个问题,其中使用useQuery Apollo挂钩运行查询可以正常工作,但是如果我使用useApolloClient挂钩来获取ApolloClient的实例,然后调用客户端的query方法,调用失败,错误为Error: query option is required. You must specify your GraphQL document in the query option.

我的代码或多或少是这样的:

import React from 'react'
import gql from 'graphql-tag'
import { useQuery, useApolloClient } from '@apollo/react-hooks'

const MyComponent = props => {

  const QUERY = gql`
    query MyPersonSearch ( $after: String, $filter: PersonFilter, $first: Int ) {
      people: people ( after: $after, filter: $filter, first: $first ) {
        totalCount
        pageInfo {
          endCursor
          hasNextPage
        }
        edges {
          node {
            firstName
            lastName
          }
        }
      }
    }
  `

  const queryVars = cursor => { after: cursor, ...otherQueryVars }

  // This works
  const { loading, error, data, fetchMore } = useQuery(
    QUERY, { variables: queryVars( ... ) }
  )

  // This doesn't work
  const client = useApolloClient()
  const fetchPages = async () => {
    const { data } = await client.query( QUERY, { variables: queryVars( ... ) } )
  }


  ...
} 

你知道这里发生了什么吗?该错误消息有点模糊,但是我假设它意味着client.query()期望将DocumentNode作为其第一个参数,并且gql的返回类型是any。 ..但是话又说回来,如果这是真的,我也希望useQuery也会失败,因为它也希望查询是DocumentNode

1 个答案:

答案 0 :(得分:0)

欢迎,结果语法是不一样的。 client.query()期望使用唯一的QueryOptions参数,而useQuery可以将查询作为第一个参数,并将可选的QueryOptions作为第二个参数。