Apollo缓存更新后UI未同步:如何更新单条缓存并触发重渲染?
解决Apollo缓存更新后UI不渲染的问题
你直接修改
cache.data.data的方式不被Apollo认可,这种内部数据的手动修改不会触发缓存变更通知,所以UI组件不会重新渲染。必须使用官方提供的cache.modifyAPI来修改缓存实体,这才会触发缓存更新事件,让关联的UI组件同步更新。正确的代码写法如下:
update = (cache) => { // 生成实体的唯一缓存标识(必须指定__typename和实体id) const entityId = cache.identify({ __typename: 'ItemType', id: itemId }); cache.modify({ id: entityId, fields: { title() { return "New title"; } } }); }针对分页列表的情况:Apollo的归一化缓存会自动维护实体与引用它的查询之间的关联。只要你的分页查询返回的列表项包含正确的
__typename和id字段,当你通过cache.modify更新实体后,分页列表中的对应条目会自动同步更新,无需额外修改分页查询的缓存数据。额外注意:确保
itemId是实体的正确ID,且__typename与后端返回的类型完全一致(大小写敏感),否则会找不到对应的缓存实体。
内容的提问来源于stack exchange,提问作者jaber
相关产品推荐
相关产品推荐

