Apollo GraphQL 连接失败

Posted

技术标签:

【中文标题】Apollo GraphQL 连接失败【英文标题】:Apollo GraphQL failing connection 【发布时间】:2021-09-23 10:13:44 【问题描述】:

我的根组件已经用 ApolloProvider 标签包裹,但错误消息告诉我不是。

错误信息

Invariant Violation: Could not find "client" in the context or passed in as an option. Wrap the root component in an <ApolloProvider>, or pass an ApolloClient instance in via options.

This error is located at:
    in App (created by ExpoRoot)

问题是我的根组件已经被 ApolloProvider 标签包裹了

反应原生代码

IMPORT 语句

import 
  ApolloClient,
  InMemoryCache,
  useQuery,
  ApolloProvider,
  gql,
 from "@apollo/client";

与 GraphQL 的连接

const client = new ApolloClient(
  uri: "https://www.outvite.me/gql/gql",
  cache: new InMemoryCache(),
  defaultOptions:  watchQuery:  fetchPolicy: 'cache-and-network'  ,
)

测试查询

const USER_QUERY = gql`
  query USER 
    users 
      nodes 
        edge 
          username
        
      
    
  
`

默认应用

这是抛出错误的地方

const data, loading = useQuery(USER_QUERY) 是 traceback 显示的那一行

export default function App() 
    const  data, loading  = useQuery(USER_QUERY)
    return (
        <ApolloProvider client=client>
           <View>
             <Text style=styles.text>Open</Text>
             <Text style=styles.text>Another text</Text>
           </View>
           <Button title="Toggle Sidebar" onPress=() => toggleSidebarView() />
           <Button title="Change theme" onPress=() => toggleColorTheme() />
        </ApolloProvider>
    );

【问题讨论】:

更严格地遵循 docs/tuts - 您正在尝试使用 hook 并稍后呈现 hook 提供程序所需的 - 您没有发现问题吗? 【参考方案1】:

如果我没记错的话,useQuery 钩子仅在您位于已包含在 ApolloProvider 中的组件中时才有效,因此您可能想做这样的事情

export default function MainApp() 
    const  data, loading  = useQuery(USER_QUERY)
    return (
      <View>
        ... use 'data' in here somewhere...
      </View>
    );

然后***App 组件看起来像

export default function App() 
    return (
      <ApolloProvider client=client>
        <MainApp />
      </ApolloProvider>
    );

【讨论】:

以上是关于Apollo GraphQL 连接失败的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 中深度本地状态的 Graphql 查询失败

Apollo Java GraphQL 客户端:generateApolloSources 失败

Apollo Graphql 分页因限制而失败

当 Apollo GraphQL 失败并出现错误时显示 MatSnackBar 消息

无法连接到 Graphql 订阅?

Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败)