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

useEffect清理功能,防止卸载组件异步更新

简烨烁
2023-03-14

我是新来的反应钩。并且当我从一节跳到另一节时会显示此警告。不用等它完成就能上马。

index.js:1警告:无法对未挂载的组件执行React状态更新。这是一个no-op,但它表明您的应用程序中存在内存泄漏。若要修复,请取消useEffect清理函数中的所有订阅和异步任务。在FadeItems(在AboutSection.jsx:32)在div(由CardBody创建)在CardBody(在AboutSection.jsx:29)在div(由Card创建)在Card(在AboutSection.jsx:22)在div(在AboutSection.jsx:19)在AbouSection(在About.jsx:7)在About(由Context.Consumer创建)

下面是FadeItems的代码:

null

import React, { useState } from "react";
import PropTypes from "prop-types";
import { Fade } from "reactstrap";

const FadeItems = (props) => {

  const [count, setCount] = useState(0);

  // const [mount, setMount] = useState(true);
  // useEffect(() => {
  //   // setTimeout(() => {
  //     // let mounted = true
  //       if (mount) {
  //         mount = false;
  //       }

  //     return function cleanup() {
  //         mounted = false
  //     }
  //     // setCount(0);
  //   // }, 300)
  // }) // prevent the unmounted component to be updated

  const { text } = props;
  return (
    <div style={{ backgroundColor: '#282c34', padding: '30px', borderBottom: "solid 2px #764abc"}}>
      {
        text.map((statement, index) => (
          <Fade
            in={count >= index ? true : false}
            onEnter={() =>
              setTimeout(() => {
                setCount(index + 1);
              }, 2000)
            }
            onExiting={() => setCount(-1)}
            tag="h5"
            className="mt-3"
            key={index + 100}
            style={{ backgroundColor: '#282c34' }}
          >
            {statement}
          </Fade>
        ))
      }
    </div>
  );
};

FadeItems.propTypes ={
  text: PropTypes.string,
}.isRequired;

export default FadeItems;

null

我有一个定时器设置在2秒后挂载褪色。由道具Onenter调用。在它上山之后。正如这里的Reacstrap文档所建议的:

淡入项目文档Reactstrap

关于代码的注释部分试图使用UseEffect进行修复。但我还不知道如何正确地使用它。如果要检查存储库:

GitHub存储库

共有1个答案

国盛
2023-03-14

您需要在useeffect的清理函数中清除设置的计时器

 const [mount, setMount] = useState(true);
   useEffect(() => {
      const timerId = setTimeout(() => {
        let mounted = true
         if (mount) {
           mount = false;
         }

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

  • 如何使用钩子(或任何其他钩子)来复制? 在传统的类组件中,我将执行以下操作: 使用hook: (完整示例:https://codesandbox.io/s/2oo7zqzx1n) 这不起作用,因为在中返回的“cleanup”函数捕获装载期间的道具,而不是卸载期间的道具状态。 如何在不运行函数体(或清除)的情况下对每个道具更改进行清理? 一个类似的问题并没有涉及获得最新道具的部分。 文件状态为: 如

  • 我正在做一些测试,安装和卸载功能及其行为。 我从一个干净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相关的特性,我

  • 本文向大家介绍在React.js功能组件中使用useEffect(),包括了在React.js功能组件中使用useEffect()的使用技巧和注意事项,需要的朋友参考一下 React钩子useEffect有助于在React的功能组件中添加componentDidUpdate和componentDidMount组合生命周期。 到目前为止,我们知道我们只能在有状态组件中添加生命周期方法。 要使用它,我

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

  • 让我解释一下这段代码的结果,以便轻松地询问我的问题。 如果我想让这个组件只在卸载时保持日志“清理”,我只需要将的第二个参数更改为。 但是,如果将更改为,不再实现名称输入的。 我想做的是,使组件只支持名称输入和。(仅在卸载组件时,日志记录“已清除”)