微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取和设置Apollo客户端InMemoryCache中新缓存的相关对象的引用?

如何解决如何获取和设置Apollo客户端InMemoryCache中新缓存的相关对象的引用?

我有一组相关的项目,例如:

book {
  id
  ...
  related_entity {
    id
    ...
  }
}

哪个apollo缓存为两个单独的缓存对象,其中related_entity上的book字段是对EntityNode对象的引用。很好,相关实体数据也可以在book上下文之外的其他地方使用,因此将其分开工作,一切看起来都很好,并且可以按预期进行更新...除非在相关实体的情况下最初获取时不存在(因此book对象上的ref为null),我稍后再创建一个

我尝试将update函数添加useMutation挂钩中,以根据其文档https://www.apollographql.com/docs/react/caching/cache-interaction/#example-adding-an-item-to-a-list创建上述related_entity,如下所示:

const [mutateEntity,_i] = useMutation(CREATE_OR_UPDATE_ENTITY,{
    update(cache,{data}) {
        cache.modify({
          id: `BookNode:${bookId}`,fields: {
            relatedEntity(_i) {
              const newEntityRef = cache.writeFragment({
                fragment: gql`
                  fragment NewEntity on EntityNode {
                    id
                    ...someOtherAttr
                  }`,data: data.entityData
              });
              return newEntityRef;
            }
          }
        })
    }
  });

但是无论我似乎尝试什么,newEntityRef始终是未定义的,即使新的EntityNode确实位于高速缓存中,并且可以使用完全相同的片段很好地读取它。我可以放弃,而只是强制重新引用Book对象,但是数据已经在这里了。

我做错了什么/是否有更好的方法? 除非有标识符,否则是否还有另一种方法获取缓存对象的引用?

解决方法

看来apollo-cache-persist实际上是一个问题-我删除了它,上面的代码按文档预期运行。看起来我可以改为使用不同的软件包名称apollo3-cache-persist更新到新版本,但最终还是不需要缓存持久性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。