首页 > 解决方案 > React apollo 客户端:警告:无法在未安装的组件上执行 React 状态更新

问题描述

我在我的反应项目中使用反应路由器和阿波罗客户端(v 3.0)。我有一个嵌套路由,比如说A -> B,我使用useQuery钩子通过 graphql 查询获取不同的数据集,比如说QAQB。在B我通过 WS 收到一条关于来自的新数据的新消息,因此我通过forQB更新了 apollo 存储缓存,但是该数据还包含请求的嵌套实体,因此此缓存更新不仅会触发组件的重新渲染but also的钩子,它会产生以下警告:client.writeQueryQBQAuseQueryQBQA

警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。

要解决此问题,请在 useEffect 清理函数中取消所有订阅和异步任务。

我在组件中添加了以下调试B

console.log('WRITE');
client.writeQuery(...)

A组件:

useEffect(() => {
  console.log('MOUNT');
  return () => {
    console.log('UNMOUNT');
  };
}, []);

并得到:

WRITE
UNMOUNT
MOUNT

因此A,在我通过client.writeQuery.

为什么会发生这种情况以及如何解决?

标签: reactjsgraphqlapollo-client

解决方案


推荐阅读