【发布时间】:2020-12-19 21:47:31
【问题描述】:
所以我正在从 apollo 客户端文档中学习突变,并且在执行突变后我遇到了更新客户端缓存。是否有必要使用这里描述的 writeFragment:https://www.apollographql.com/docs/react/data/mutations/#making-all-other-cache-updates ?
因为我可以通过扩展现有数组并添加更新函数返回的“addTodo”对象来做同样的事情(至少我对 redux 是这样做的)
我的更新函数如下所示:
update(cache, { data: { addTodo } }) {
cache.modify({
fields: {
todos(existingTodos = []) {
return [...existingTodos, addTodo];
}
}
});
}
我错过了什么吗?
【问题讨论】:
-
同理需要——更新依赖同一个数据源的其他组件(查询结果)
-
@xadm,是的,我理解使用更新功能背后的目的。我的问题是关于使用片段而不是直接传播数组并添加新的对象,因为它同样有效:)
-
缓存突变(子项/子属性)并不总是影响整个查询的缓存条目,组件不会被重新渲染...... writeQuery/writeFragment 就是为了这个
-
对于任何混淆,我深表歉意,但他们正在重新渲染,没有任何问题。文档还说,目标字段的缓存会更新为我们为修饰符设置的任何返回值。请让我知道是否有助于在codeandbox上分享示例代码供您查看。
-
我相信它有效,这是非常基本的用例......在更复杂的情况下它可能会失败......请记住未来......如果某些带有查询的组件在突变后没有重新呈现,然后检查缓存更新方法。
标签: graphql apollo-client