在 Query 的上下文中或作为传递的道具中找不到“客户端”

Posted

技术标签:

【中文标题】在 Query 的上下文中或作为传递的道具中找不到“客户端”【英文标题】:Could not find "client" in the context of Query or as passed props 【发布时间】:2018-09-25 14:14:07 【问题描述】:

这就是我尝试在我的 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)

【问题讨论】:

【参考方案1】:

&lt;ApolloProvider&gt; 不会包装 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>
    )
  

【讨论】:

【参考方案2】:

在开始使用@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>

【讨论】:

请注意,对于react-apollo >= v3.*,您根本不需要将Content 包裹在ApolloHooksProvider

以上是关于在 Query 的上下文中或作为传递的道具中找不到“客户端”的主要内容,如果未能解决你的问题,请参考以下文章

JestJS -> 不变违规:在“连接(投资组合)”的上下文或道具中找不到“商店”

React/Redux 测试 - 在上下文或道具中找不到“商店”

ReactJs / Redux Invariant Violation:在“Connect(LoginContainer)”的上下文或道具中找不到“store”

React Context API,从子组件设置上下文状态,而不是将函数作为道具传递

未捕获的错误:在 url 中找不到类 'WP_Query' - Wordpress

next.js + GraphQL:“不变违规:在上下文中找不到“客户端”或作为选项传入......”