在 Apollo-client 中,writeQuery 会更新缓存,但 UI 组件不会重新渲染

Posted

技术标签:

【中文标题】在 Apollo-client 中,writeQuery 会更新缓存,但 UI 组件不会重新渲染【英文标题】:In Apollo-client the writeQuery updates the cache but the UI components do not rerender 【发布时间】:2020-10-14 15:48:01 【问题描述】:

我已完全按照 Apollo 客户端 2.6 的文档进行操作。自 2018 年以来,似乎网上的人们似乎都遇到了这个问题。我错过了什么吗?文档应该更新,这不起作用,很明显它不适用于这么多人。

成功写入缓存后,如何更新我的 UI。这应该开箱即用。这是一个创建突变,我在addleo突变中添加了一条记录,之后我想在所有记录的列表中显示添加的记录,即LIST LEOS

const ADD_LEO = gql`
mutation AddLeo($text: String!, $userId: String!)
  addLeo(text: $text, userId: $userId) 
    id
    text
    userId
    

`;

 const LISTLEOS = gql`
query LISTLEOS 
  ListLeos 
    id
    text
    userId
  

`;

  const [addleo,  loading, error ] = useMutation
      (
          ADDLEO,
          
            update(cache, data: addleo)
                const  ListLeos  = cache.readQuery( query: LISTLEOS);
                cache.writeQuery(
                    query: LISTLEOS,
                    data:  ROOT_QUERY: ListLeos.concat([addleo]),
                ); 
            
           
      );

以上内容应该会导致与LISTLEOS 关联的组件重新呈现,但事实并非如此。请帮忙。

【问题讨论】:

提供了错误的语法/错误的数据......首先要确保你做的事情是正确的 【参考方案1】:

无需使用ROOT_QUERY 作为密钥。传递给writeQuerydata 选项应该看起来就像您的服务器返回的data

cache.writeQuery(
  query: LISTLEOS,
  data:  ListLeos: ListLeos.concat([addleo]),
); 

【讨论】:

以上是关于在 Apollo-client 中,writeQuery 会更新缓存,但 UI 组件不会重新渲染的主要内容,如果未能解决你的问题,请参考以下文章

如何在 apollo-client 中实现注销

如何在使用表单组件时在 apollo-client 中链接突变

是否可以使用 apollo-client 跳过部分查询

使用 Apollo-Client 重新获取查询会引发错误

是否可以将服务注入 apollo-client 的中间件?

在 Apollo-client 中,writeQuery 会更新缓存,但 UI 组件不会重新渲染