我遇到了一个问题,其中使用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
。
答案 0 :(得分:0)
欢迎,结果语法是不一样的。 client.query()
期望使用唯一的QueryOptions
参数,而useQuery
可以将查询作为第一个参数,并将可选的QueryOptions
作为第二个参数。