在查询上下文或传递的道具中找不到 "client"

Could not find "client" in the context of Query or as passed props

这就是我尝试在我的 React 本机应用程序中实现 apollo graphQL 的方式。

但是我确实得到了错误

Could not find "client" in the context of Query or as passed props. Wrap the root component in an <ApolloProvider>

所以我认为我完全做到了这一点,但显然我误解了一些东西。

import React, { Component } from 'react'
import { ApolloProvider, graphql } from 'react-apollo'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
import gql from 'graphql-tag'

import Routes from './config/routes'

// Initialize the Apollo Client
const client = new ApolloClient({
  link: createHttpLink({ uri: 'http://localhost:3000' }),
  cache: new InMemoryCache()
})

// Define query types
const DATA_QUERY = gql`
  query {
    getVersion {
      version
    }
  }
`

export class App extends Component {
  render () {
    console.log(this.props)
    // ApolloProvider lets us use Apollo Client in descendant components
    return (
      <ApolloProvider client={client}>
        <Routes />
      </ApolloProvider>
    )
  }
}

// Inject query response as `this.props.data`
export default graphql(DATA_QUERY)(App)

<ApolloProvider> 不会包装 graphql(DATA_QUERY) 应用程序,因为它位于该组件内。像这样的东西应该可以工作:(尽管你可能想选择一个不同的名字)

const ApolloRoutes = graphql(DATA_QUERY)(Routes);

export default class App extends Component {
  render () {
    console.log(this.props)
    // ApolloProvider lets us use Apollo Client in descendant components
    return (
      <ApolloProvider client={client}>
        <ApolloRoutes />
      </ApolloProvider>
    )
  }
}

我在开始使用 @apollo/react-hooks 后试图找到同一问题的解决方案时遇到了这个问题。由于错误的表述是相同的,我仍然会提供我的答案,以防对某人有所帮助。

错误是内容周围缺少 ApolloHooksProvider。我通过更改此

来修复它
<ApolloProvider client={client}>
    <Content />
</ApolloProvider>

至此

import { ApolloProvider as ApolloHooksProvider } from '@apollo/react-hooks'

<ApolloProvider client={client}>
    <ApolloHooksProvider client={client}>
        <Content />
    </ApolloHooksProvider>
</ApolloProvider>