reactjs - React apollo 客户端:警告:无法在未安装的组件上执行 React 状态更新
问题描述
我在我的反应项目中使用反应路由器和阿波罗客户端(v 3.0)。我有一个嵌套路由,比如说A -> B
,我使用useQuery
钩子通过 graphql 查询获取不同的数据集,比如说QA
和QB
。在B
我通过 WS 收到一条关于来自的新数据的新消息,因此我通过forQB
更新了 apollo 存储缓存,但是该数据还包含请求的嵌套实体,因此此缓存更新不仅会触发组件的重新渲染but also的钩子,它会产生以下警告:client.writeQuery
QB
QA
useQuery
QB
QA
警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。
要解决此问题,请在 useEffect 清理函数中取消所有订阅和异步任务。
我在组件中添加了以下调试B
:
console.log('WRITE');
client.writeQuery(...)
和A
组件:
useEffect(() => {
console.log('MOUNT');
return () => {
console.log('UNMOUNT');
};
}, []);
并得到:
WRITE
UNMOUNT
MOUNT
因此A
,在我通过client.writeQuery
.
为什么会发生这种情况以及如何解决?
解决方案
推荐阅读
- r - 如何在数据集中使用多个子集?
- c# - 如何从数据库中获取 ViewModel 中的数据并将其显示在 Asp.net MVC 中查看?
- python - 做什么
和 意思是? - scala - 如何在 Apache Spark 中执行数据集的加权分区
- css - 如何设置 css 以使选择按钮在向下滚动时不会移动?
- c# - 在 EF Core 中编写一个不区分大小写的搜索查询?
- excel - 检查所选单元格左侧和右侧的单元格是否包含形状
- c# - 检查 2 个数组元素是否相等,如果相等则打印 yes,如果不是每次检查则打印 no
- python-3.x - 如何用计算替换正则表达式
- c - 在 C 中找到穿过物理迷宫的路径