当前位置: 首页 > 知识库问答 >
问题:

甚至在卸载组件后,use效应中的这个清理功能也会运行吗?

周伟泽
2023-03-14

现在我每10秒调用一个间隔函数。我的问题是在使用效果我有一个依赖数组,有通道ID。那么,当组件卸载时,是否会调用这个clearInterval函数?

const pollCurrentConversationId = channelID => {
      pollBackendStart({ metadata: { channelID } });
};

const pageFocused = () => {
       if (document.hasFocus()) {
       pollCurrentConversationId(channelID);
     }
     pollingTimerId.current = setInterval(() => {
       if (document.hasFocus()) {
         pollCurrentConversationId(channelID);
       }
     }, 10000);
};

const pageNotFocused = useCallback(() => {
     if (channelID) {
       pollCurrentConversationId(channelID);
     }
     clearInterval(pollingTimerId.current);
   }, [channelID, pollBackendStart]);

useEffect(() => {
     if (channelID) {
       pageFocused();
     }
       return () => {
       clearInterval(pollingTimerId.current);
       };
    }, [currentConversation.id]);

共有1个答案

魏朗
2023-03-14

清除在卸载组件时运行,而不管依赖数组如何。它还在每次组件重新渲染时运行。

 类似资料:
  • 我是新来的反应钩。并且当我从一节跳到另一节时会显示此警告。不用等它完成就能上马。 index.js:1警告:无法对未挂载的组件执行React状态更新。这是一个no-op,但它表明您的应用程序中存在内存泄漏。若要修复,请取消useEffect清理函数中的所有订阅和异步任务。在FadeItems(在AboutSection.jsx:32)在div(由CardBody创建)在CardBody(在Abou

  • 我跑了1.6discord.py。我加载了一个Cog,它在不和谐上维护仪表板样式的消息(定期更新)。 卸载此Cog时,我希望使用默认的方法,这是一个异步调用。 根据文档,自动运行Cog清理代码基本上有两个选项: > 扩展清理功能-非异步。https://discordpy.readthedocs.io/en/latest/ext/commands/extensions.html#cleaning-

  • 问题内容: 我正在使用Attach API在运行时加载JVMTI代理。我想在完成程序后卸载JVMTI代理,而不会终止加载该代理的JVM。根据此文档,无法从Attach API进行此操作。还有其他方法可以强制代理通过Java API或从JVMTI代理内部卸载自身吗? 问题答案: JVMTI 规范说可以卸载(不终止JVM),但是卸载依赖于平台且超出规范范围。

  • 我正在做一些测试,安装和卸载功能及其行为。 我从一个干净servicemix 7.0.0.m1安装开始,默认情况下它有cxf 3.1.4和camel 2.16.2。 之后,如果我输入bundle:requirements44,它表示所有与cxf相关的东西都由3.1.9版解决了。 我尝试卸载cxf/3.1.9,卸载后,当我键入feature:list-i时,它显示了与cxf 3.1.9相关的特性,我

  • 我正在尝试将基于类的组件转换为功能组件。如果在useEffect钩子中使用与componentDidMount下相同的代码,则会出现上述错误。 以下是发生错误的功能组件 抛出以下错误,浏览器崩溃未捕获(promise)错误:重新渲染过多。React限制渲染的数量以防止无限循环。

  • 我知道,用jsp编写scriptlet代码是一种坏习惯,但我这样做只是为了理解jsp/Servlet的概念。 所以告诉我,为什么这个页面在达到假条件之前关闭标签后还在运行?如何在关闭页签停止它?