chi*_*gis 13 reactjs graphql apollo-client
我在我的反应项目中使用反应路由器和阿波罗客户端(v 3.0)。我有一个嵌套的路由,假设A -> B
我使用useQuery
钩子通过 graphql 查询获取不同的数据集,假设分别是QA
和QB
。在B
我通过 WS 收到一条关于来自 的新数据的新消息QB
,所以我通过client.writeQuery
for更新了 apollo 存储缓存QB
,但是这段数据还包含一个请求 in 的嵌套实体QA
,所以这个缓存更新不仅触发了组件的重新渲染useQuery
钩子QB
但也QA
,产生以下警告:
警告:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。
要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。
我在B
组件中添加了以下调试:
console.log('WRITE');
client.writeQuery(...)
Run Code Online (Sandbox Code Playgroud)
和A
组件:
useEffect(() => {
console.log('MOUNT');
return () => {
console.log('UNMOUNT');
};
}, []);
Run Code Online (Sandbox Code Playgroud)
并得到:
WRITE
UNMOUNT
MOUNT
Run Code Online (Sandbox Code Playgroud)
因此,A
在我通过client.writeQuery
.
为什么会发生这种情况以及如何解决?
归档时间: |
|
查看次数: |
1156 次 |
最近记录: |