如何在 Apollo 客户端 InMemoryCache 中获取和设置新缓存的相关对象的 ref?
How to get and set a ref for a newly cached related object in Apollo client InMemoryCache?
我有一组这样的相关项目:
book {
id
...
related_entity {
id
...
}
}
apollo 缓存为两个单独的缓存对象,其中 book
上的 related_entity
字段是对 EntityNode
对象的引用。这很好,相关实体数据也在 book
上下文之外的其他地方使用,因此将其分开工作,一切看起来都很好并且按预期更新......除了相关实体的情况在初始获取时不存在(因此 book
对象上的引用为空),我稍后创建一个。
我已经尝试将 update
函数添加到 useMutation
挂钩,根据他们的文档创建上述 related_entity
:https://www.apollographql.com/docs/react/caching/cache-interaction/#example-adding-an-item-to-a-list 像这样:
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 对象,但数据已经就在那里。
我在做什么wrong/is有更好的方法吗?
除非你有它的标识符,否则还有另一种方法来获取缓存对象的引用吗?
看起来这实际上是 apollo-cache-persist
的一个问题 - 我删除了它并且上面的代码按照文档的预期运行。看起来我也可以在不同的包名 apollo3-cache-persist
下更新到新版本,但我最终还是不需要缓存持久性。
我有一组这样的相关项目:
book {
id
...
related_entity {
id
...
}
}
apollo 缓存为两个单独的缓存对象,其中 book
上的 related_entity
字段是对 EntityNode
对象的引用。这很好,相关实体数据也在 book
上下文之外的其他地方使用,因此将其分开工作,一切看起来都很好并且按预期更新......除了相关实体的情况在初始获取时不存在(因此 book
对象上的引用为空),我稍后创建一个。
我已经尝试将 update
函数添加到 useMutation
挂钩,根据他们的文档创建上述 related_entity
:https://www.apollographql.com/docs/react/caching/cache-interaction/#example-adding-an-item-to-a-list 像这样:
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 对象,但数据已经就在那里。
我在做什么wrong/is有更好的方法吗? 除非你有它的标识符,否则还有另一种方法来获取缓存对象的引用吗?
看起来这实际上是 apollo-cache-persist
的一个问题 - 我删除了它并且上面的代码按照文档的预期运行。看起来我也可以在不同的包名 apollo3-cache-persist
下更新到新版本,但我最终还是不需要缓存持久性。