当我尝试使用 theme-apollo 启动 gatsby 时,出现错误:“this.refreshClient().client.watchQuery 不是函数”

Posted

技术标签:

【中文标题】当我尝试使用 theme-apollo 启动 gatsby 时,出现错误:“this.refreshClient().client.watchQuery 不是函数”【英文标题】:When i try to start gatsby with theme-apollo i get the error: "this.refreshClient().client.watchQuery is not a function" 【发布时间】:2021-04-01 09:07:10 【问题描述】:

我建立了一个 gastby 项目。我想和 apollo-client 一起工作。我安装了插件“gatsby-plugin-apollo”,我也将它插入到配置文件的插件数组中。我创建了一个客户端并将其添加到 ApolloProvider。当我尝试将它与现有查询一起使用时,出现错误:

这是我的客户:

//client.js
    import fetch from 'isomorphic-fetch';
    import  ApolloClient, InMemoryCache, HttpLink  from '@apollo/client';
    import  backendUrl  from "../constants/constants"

const client = new ApolloClient(
  cache: new InMemoryCache(),
  link: new HttpLink(
    uri: backendUrl,
    fetch
  )
);
export default client

这是我在 gatsby-s-s-r 和 gatsby-browser 文件中导出的 wrapRootElement

    import React from 'react';
import  ApolloProvider  from '@apollo/client';
import client from "./client"
import AuthProvider from '../context/auth';

export const wrapRootElement = ( element ) => 
  return (

    <ApolloProvider client=client>element</ApolloProvider>

  )
;

【问题讨论】:

【参考方案1】:

您的gatsby-browser.js 看起来不错,理想的结构应该是这样的:

import React from 'react';
import fetch from 'isomorphic-fetch';
import ApolloClient, ApolloProvider, InMemoryCache from '@apollo/client';

const cache = new InMemoryCache();

// eslint-disable-next-line react/prop-types
export const wrapRootElement = (element, uri, headers, credentials) => 
  const client = new ApolloClient(
    fetch,
    uri,
    headers,
    credentials,
    cache
  );
  return <ApolloProvider client=client>element</ApolloProvider>;

正如我所说,你的看起来不错。但是,您的gatsby-s-s-r.js 应该导入在之前的 sn-p (gatsby-browser.js) 中创建的 wrappWrootElement。比如:

export wrapRootElement from './gatsby-browser';

您可能会发现以下working GitHub 有用,而此Spectrum thread。

【讨论】:

是的,s-s-r 脚本确实导出了 wrapRootElement。我像你给我看的那样改变了它,但没有任何改变......仍然是同样的错误 我已经添加了一个基于您的用例的工作仓库:github.com/myhendry/fs-web/blob/master/src/utils/apollo/…

以上是关于当我尝试使用 theme-apollo 启动 gatsby 时,出现错误:“this.refreshClient().client.watchQuery 不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 BQ GA 导出更改?

无法匹配 GA 高级细分和 BigQuery 结果

无显示模式下的 Matlab GA 绘图

JBOSS的启动和停止

JBOSS的启动和停止

查询所有分区表