reactjs - 如何在 React useEffect 中正确清理?
问题描述
我有一个从 Apollo 订阅接收数据的反应函数。
对于每个订阅,都会创建一个网络连接。我需要在组件卸载时破坏网络连接,但在新订阅到达时不需要。
const { data } = useSubscription(...);
const {connections, setConnections} = useState([]);
const createNetworkConnection = (id) => {
const connection = new CreatSomeConnection(id);
connection.onMessage = () => doSomeOtherMutations();
return connection;
};
useEffect(() => {
setConnections((current) => [...current, createNetworkConnection(id)]);
}, [data])
如果我将清理添加到上面的钩子中,那么每次新订阅到达时它都会运行,这不是我想要的(我还不想破坏其他网络连接)。
如果我添加另一个钩子useEffect(() => () => doCleanUp(), [])
,那么清理函数的范围没有最新的connections
(或任何,实际上)。
我认为解决此问题的唯一方法是使用useRef
我试图避免的 ?
解决方案
推荐阅读
- r - 正态分布总体,在 R 中计算出现负读数或零读数的概率
- python - 找不到适用于 python 的 mb_protocol 模块
- prometheus - 在同一张图中聚合不同的普罗米修斯指标
- sql - 如何从“日期” - 2 周和“日期” + 2 周过滤日期范围
- r - 用 ggplot 改变 ylim
- python - 是否有一些用于 aiohttp 的缓存库,例如用于请求的 CacheControl?[Python]
- c++ - 类中的 Bool 成员变量在未初始化时设置为 True
- python - Docker Compose Nginx 内部服务器错误
- python - 删除熊猫数据框中的所有特殊字符
- angular - 如何避免带有逻辑和副作用的嵌套订阅