【发布时间】:2020-07-26 10:31:04
【问题描述】:
背景:总是可以更新 Apollo 存储缓存,但不能更新 UI
问题:
- UI 更新与否的原因是什么?
- 在更新中传递数据对象的正确方法是什么?
“反应”:“~16.9.0”
"@apollo/react-hooks": "^3.1.3"
我的项目中的 UI 和缓存更新代码:
update: (store, { data: { newPhoto } }) => {
const { bookInfo } = store.readQuery({ query: GET_BOOK_BY_ID, variables: { bookId } });
bookInfo.photos = [...bookInfo.photos, newPhoto];
store.writeQuery({
query: GET_BOOK_BY_ID,
variables: { bookId },
data: {
bookInfo
}
});
}
在这一行:bookInfo.photos = [...bookInfo.photos, newPhoto];,直接修改bookInfo对象,直接传回writeQuery的data
这对我来说看起来不太好,因为我看到人们说它需要是“不可变的”或“传递新对象”等。
【问题讨论】:
-
我认为,您的组件渲染功能内部的查询部分可能存在问题。请分享您的查询部分代码,尤其是您使用查询的方式和变量。变量部分应该与你变异的部分完全相同
-
嗨@TrueEye!感谢您的评论。我已经解决了这个问题,因为我没有以不可变的方式编辑数据!有同样经历的人,一定要去看看github.com/apollographql/apollo-client/pull/4543。通过将 freezeResults 和 assumeImmutableResults 应用到 Apollo 客户端将有助于检测问题。
标签: reactjs apollo react-apollo