将嵌套对象写入本地 Apollo 缓存

Posted

技术标签:

【中文标题】将嵌套对象写入本地 Apollo 缓存【英文标题】:Writing nested object to local Apollo cache 【发布时间】:2020-05-02 01:22:49 【问题描述】:

我已经看过了:Writing nested object to Apollo client cache

我猜互联网上的其他地方。

所以我要做的就是将一个对象写入 Apollo 缓存中,并将其存储在本地。这是我的设置:

const cache = new InMemoryCache()
const client = new ApolloClient(
    uri: '/hasura/v1/graphql',
    cache,
    credentials: 'include',
)

然后我写这个来初始化缓存,取自:https://www.apollographql.com/docs/react/data/local-state/#querying-local-state

cache.writeData(
    data: 
        todos: [],
        visibilityFilter: 'SHOW_ALL',
        networkStatus: 
            __typename: 'NetworkStatus',
            id: 1,
            isConnected: false,
        ,
    ,
)

现在,当我想使用这个查询来查询缓存时:

const lolquery = gql`
    visibilityFilter @client
`

const result = cache.readQuery( query: lolquery )
console.log(result)

我可以获得 visibilityFilter 和 todos,但是当我尝试查询 networkStatus 时,即

const lolquery = gql`
    networkStatus @client
`

我收到以下错误:

未捕获的不变违规:不变违规:10

谷歌搜索这个错误并没有给我太多答案。

只有我一个人遇到这种情况吗?我是否遗漏了一些非常明显的东西?

【问题讨论】:

【参考方案1】:

networkStatus 被初始化为一个对象,因此您必须使用一个或多个字段的子选择来查询它。


  networkStatus @client 
    isConnected
  

【讨论】:

好吧,哇,真的。我不知道我怎么没有尝试过这个......但我想是因为我的最终目标是获取对象列表/我不知道我是否读过在获取对象时需要执行此规范的任何地方GraphQL。多么令人沮丧……但谢谢!

以上是关于将嵌套对象写入本地 Apollo 缓存的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 ID 从 Apollo 缓存中读取嵌套对象?

无法使用嵌套值设置 Apollo 本地状态

在 Apollo GraphQL 中跨本地和远程模式的嵌套数组中建模数据的最佳方法?

写入缓存时,Apollo 客户端链接状态“ 中缺少字段”?

如何将对象数组粘贴到 GraphQL Apollo 缓存中?

Apollo 从缓存中查询对象值