1

我有一组相关的项目,如下所示:

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

其中 apollo 缓存为两个单独的缓存对象,其中related_entity字段 onbookEntityNode对象的引用。这很好,相关实体数据也在 a 上下文之外的其他地方使用,book所以让它分开工作,一切看起来都很好,并且按预期更新......除非相关实体不存在于初始提取(因此book对象上的 ref 为空),我稍后创建一个。

我尝试向钩子添加一个update函数,根据他们的文档useMutation创建上述内容: https ://www.apollographql.com/docs/react/caching/cache-interaction/#example-adding-an-item-to-a -像这样的列表: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 对象,但数据已经在那里了

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

4

1 回答 1

0

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

于 2020-09-30T22:24:55.540 回答