当前位置:  开发笔记 > 编程语言 > 正文

Apollo客户端:Upsert突变仅在更新时修改缓存,但在创建时不修改

如何解决《Apollo客户端:Upsert突变仅在更新时修改缓存,但在创建时不修改》经验,为你挑选了0个好方法。

我有一个在创建或更新时触发的upsert查询.在更新时,Apollo将结果集成到缓存中,但在创建时却没有.

这是查询:

export const UPSERT_NOTE_MUTATION = gql`
  mutation upsertNote($id: ID, $body: String) {
    upsertNote(id: $id, body: $body) {
      id
      body
    }
  }`

我的客户:

const graphqlClient = new ApolloClient({
  networkInterface,
  reduxRootSelector: 'apiStore',
  dataIdFromObject: ({ id }) => id
});

来自服务器的响应是相同的:返回两者idbody返回,但Apollo不会data自动将新ID添加到缓存对象中.

是否有可能让Apollo自动添加新对象而data不会触发后续获取?

这是我的数据存储的样子:

在此输入图像描述

UPDATE

根据文档,该函数updateQueries应该允许我将新元素推送到我的资产列表,而不必再次触发我的原始获取查询.

该函数被执行但该函数返回的任何内容都被完全忽略,并且不修改缓存.

即使我做这样的事情:

    updateQueries: {
      getUserAssets: (previousQueryResult, { mutationResult }) => {
        return {};
      }
    }

没有什么变化.

更新#2

仍然无法获取我的资产列表进行更新.

在里面updateQueries,这是我的previousQueryResult样子:

    updateQueries: {
      getUserAssets: (previousQueryResult, { mutationResult }) => {
        return {
          assets: []
            .concat(mutationResult.data.upsertAsset)
            .concat(previousQueryResult.assets)
        }
      }
    }

但无论我返回什么,数据存储都不刷新:

在此输入图像描述

作为参考,这是每个asset看起来像:

在此输入图像描述

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有