React Uncaught Invariant Violation:在 ApolloConsumer 的上下文中找不到“客户端”。将根组件包装在 <ApolloProvider> 中

Posted

技术标签:

【中文标题】React Uncaught Invariant Violation:在 ApolloConsumer 的上下文中找不到“客户端”。将根组件包装在 <ApolloProvider> 中【英文标题】:React Uncaught Invariant Violation: Could not find "client" in the context of ApolloConsumer. Wrap the root component in an <ApolloProvider> 【发布时间】:2020-03-21 09:44:21 【问题描述】:

我有一个使用 react-apollo:2.5.8 的 React 应用程序和一个我通过 NPM 安装并在应用程序中使用的自定义组件库。该库在对等和开发依赖项中列出了react-apollo:2.5.8。自从我将 react-apollo 升级到 2.5.8 后,我一直收到此错误

`Uncaught Invariant Violation: Could not find "client" in the context of ApolloConsumer. Wrap the root component in an <ApolloProvider>.`

我也尝试在库的 Webpack 构建中的 externals 中列出 React-apollo。这样,在应用程序中只使用一个安装。但没有运气。每次我尝试导入组件时,我都会收到此错误。应用内的组件能够查询成功,是库组件抛出这个错误。

关于如何解决此问题的任何建议?我不想升级到 ^3.0.0,因为有重大更改并且会涉及大量重构。我也在服务器端渲染应用程序,在这种情况下它工作得很好,而且我没有收到这个错误。当我尝试运行仅客户端版本时,会出现此错误。

更新:我可以看到库组件似乎仍在使用其 node_modules 文件夹中的自己的 react-apollo。模块格式为ejs,而在应用程序中,模块格式是主要选项cjs。这可能是导致错误的原因。我会看看我是否可以阻止库组件使用他们自己的react-apollo 包。

【问题讨论】:

你是从同一个包中导入提供者和你的钩子/组件吗?即只有react-apollo 而不是react-apollo@apollo/react-hooks 是的,只有react-apollo。因为我还在2.5.8,所以我没有使用 Hooks 【参考方案1】:

所以我通过在我的库组件文件夹中创建指向我的应用程序中的react-apollo 包的符号链接来解决这个问题。由于这主要是对开发环境的要求,因此这似乎可以解决问题。不是最好的解决方案,但目前可行。

【讨论】:

以上是关于React Uncaught Invariant Violation:在 ApolloConsumer 的上下文中找不到“客户端”。将根组件包装在 <ApolloProvider> 中的主要内容,如果未能解决你的问题,请参考以下文章

react返回数组问题

React Native Invariant Violation:查看配置

React Navigation Invariant 违规:尝试获取本机标签

React-Native = Invariant Violation:超过最大更新深度

React-Native Invariant Violation:元素类型无效

自定义 React Native UI 组件:Invariant Violation