apollo - ApolloClient:订阅删除后 UI (ROOT_QUERY) 未更新
问题描述
阿波罗客户端:2.6.3
反应阿波罗:2.2.1
因此,我有一个在项目删除请求时触发的订阅,但在订阅发生后不更新 UI。
我的订阅代码如下:
<DeleteItem
id={item.id}
urlReferer={urlReferer}
subscribeToDeleteItems={() =>
subscribeToMore({
document: DELETE_ITEM_SUBSCRIPTION,
variables: {},
updateQuery: (prev, { subscriptionData }) => {
if (!subscriptionData.data) return prev;
const deletedItem = subscriptionData.data.itemDeleted;
let newItemList;
console.log("prev = ", prev);
if (isDuplicateItem(deletedItem.id, prev.me.items)) {
newItemList = prev.me.items.filter((item) => {
return deletedItem.id !== item.id;
});
console.log("new item list = ", newItemList);
} else {
return prev;
}
return Object.assign({}, prev, {
ROOT_QUERY: {
me: {
items: [newItemList]
}
}
});
}
})
}
>Delete This Item</DeleteItem>
生成的输出如下所示:
ROOT_Query 存储:
我在这里忽略了什么,我该如何解决?
解决方案
因此,我通过将父查询的 fetchPolicy 更改为“缓存和网络”并确保在需要标准化结果的每个查询中都存在 ID 来解决此问题,如此处所述:Apollo 中的自动 UI 更新问题:`updateQuery` not与 `subscribeToMore` 一起正常工作
推荐阅读
- java - TreeTableView - 在树列上设置滚动?
- javascript - 高于 0x99 的 Uint8Array 值打印为 0
- amazon-web-services - AWS 中的预留实例灵活性
- javascript - 在 TypeScript 中使用 EditorJS 时遇到问题
- java - 无法在 kafka(hortonworks 沙箱)和 intelliJ IDEA(本地 Windows 系统)之间建立连接
- javascript - 将数据发布到 Firebase Firestore
- java - 如何处理在新选项卡中自动打开的新窗口?
- python - ValueError:长度不匹配:预期轴有 7 个元素,新值有 5 个元素
- java - 为什么将插件导出为 jar 并集成到 IDE 中后,插件的所有图像都会消失?
- ios - 使用 SwiftUI 的 Catalyst 应用程序中的键命令连续触发