Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Apollo客户端InMemoryCache中获取和设置新缓存的相关对象的引用?_Javascript_Graphql_React Apollo_Apollo Client_Apollo Cache Inmemory - Fatal编程技术网

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

Javascript 如何在Apollo客户端InMemoryCache中获取和设置新缓存的相关对象的引用?,javascript,graphql,react-apollo,apollo-client,apollo-cache-inmemory,Javascript,Graphql,React Apollo,Apollo Client,Apollo Cache Inmemory,我有一套相关项目,如: book { id ... related_entity { id ... } } apollo将其缓存为两个单独的缓存对象,其中书籍上的相关实体字段是对实体节点对象的引用。这很好,相关实体数据也在书籍上下文之外的其他地方使用,因此将其单独使用是可行的,并且一切看起来都很好,并按预期进行更新……除非初始获取时不存在相关实体(因此书籍对象上的引用为空)稍后我会创建一个 我已经尝试在usemotation钩子中添加一个update函数,该钩子

我有一套相关项目,如:

book {
  id
  ...
  related_entity {
    id
    ...
  }
}
apollo将其缓存为两个单独的缓存对象,其中
书籍
上的
相关实体
字段是对
实体节点
对象的引用。这很好,相关实体数据也在
书籍
上下文之外的其他地方使用,因此将其单独使用是可行的,并且一切看起来都很好,并按预期进行更新……除非初始获取时不存在相关实体(因此
书籍
对象上的引用为空)稍后我会创建一个

我已经尝试在
usemotation
钩子中添加一个
update
函数,该钩子根据他们的文档创建前面提到的
相关实体
:如下所示:

const[mutateEntity,\u i]=使用mutation(创建或更新实体{
更新(缓存,{data}){
cache.modify({
id:`BookNode:${bookId}`,
字段:{
关联实体(_i){
const newEntityRef=cache.writeFragment({
片段:gql`
EntityNode上的片段NewEntity{
身份证件
…其他人
}`,
数据:data.entityData
});
返回newEntityRef;
}
}
})
}
});
但无论我尝试了什么,
newEntityRef
始终是未定义的,即使新EntityNode肯定在缓存中,并且可以使用完全相同的片段很好地读取。我可以放弃,只是强制重新刻蚀图书对象,但数据已经在那里了

我做错什么了吗/有更好的办法吗?
除非如此,如果您有缓存对象的标识符,是否有其他方法获取该对象的引用?

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

在?更严格地遵循示例代码(readField、returnexistingref等)。问题本身已经链接到了这个确切的文档,并且代码非常接近示例代码。