来自 apollo-boost 的 ApolloClient 试图分配给只读属性

Posted

技术标签:

【中文标题】来自 apollo-boost 的 ApolloClient 试图分配给只读属性【英文标题】:ApolloClient from apollo-boost attemped to assign to readonly property 【发布时间】:2019-10-09 07:30:28 【问题描述】:

我正在使用 react-native,并尝试从 apollo-boost 加载 Apollo。当我尝试导入客户端时,我收到错误消息“尝试分配给只读属性”。我不确定如何解决这个问题,从堆栈跟踪来看,它似乎在 apollo-boost 包中。有人知道我该如何解决这个问题吗?

edit:添加图片和细节。 当我尝试通过 Expo 加载应用程序时,我得到了这个。当它开始时,我明白了。堆栈跟踪提到的我的应用程序中的第一个文件 StoresScreens,有问题的行只是导入行。

import ApolloClient from 'apollo-boost';

【问题讨论】:

请编辑您的问题以包含完整错误和您看到的整个堆栈跟踪。此外,描述您何时遇到此错误可能会有所帮助——在启动客户端时?运行特定查询或突变时? 我遇到了同样的错误,只是在我的 React Native App 中对 Apollo 客户端进行了基本初始化 这里也一样,只是在我的 react-native 应用程序中导入模块似乎会导致这种情况。 【参考方案1】:

我遇到了同样的错误。通过使用apollo-client、apollo-cache-inmemory、apollo-link-http包来创建Apollo客户端而不是使用apollo-boost解决。

这是代码App.js

import React from 'react'
import ApolloClient from 'apollo-client';
import  InMemoryCache  from 'apollo-cache-inmemory';
import  HttpLink  from 'apollo-link-http';

const withProvider = (Component) => 

  const cache = new InMemoryCache();
  const link = new HttpLink(
    uri: 'your-url'
  )
  const client = new ApolloClient(
    link,
    cache
  );
  return class extends React.Component 
    render() 
      return (
        <ApolloProvider client=client>
          <Component ...this.props client=client />
        </ApolloProvider>
      )
    
  

export default withProvider(App);

【讨论】:

一些背景知识:这通常是由于捆绑器配置未设置为编译 TypeScript - 其中编写了apollo-boost。[Apollo 有一个方便的迁移指南,用于远离 boost](我的懒惰解决方案只是删除 boost 并按照apollo-boost migration guide 手动添加代码。【参考方案2】:

至少使用 Typescript,作为临时解决方法,您可以这样做:

import ApolloClient from "apollo-boost/lib/index";

似乎与这个问题有关:https://github.com/apollographql/apollo-client/issues/4843

【讨论】:

以上是关于来自 apollo-boost 的 ApolloClient 试图分配给只读属性的主要内容,如果未能解决你的问题,请参考以下文章

Apollo-boost 缓存问题

禁用从 apollo-boost 导出的 ApolloClient 中的缓存

使用 apollo-boost 持久化缓存

如何在来自客户端的 graphql 查询中添加 hmac?

Apollo 客户端自签名证书

如何使用 ApolloClient 记录 HTTP 请求和响应