React 类中的清除间隔

2023-11-23

因此,我们有这个简单的 React 组件,它从父组件接收一个整数。单击该按钮后,我们会在屏幕上显示整数并开始倒计时。

问题是如何停止倒计时。在阅读其他 SO 帖子时,我发现了clearInterval(),但似乎我在这里遗漏了一些东西。

任何帮助将不胜感激。如果有人好心地向我解释为什么示例代码不能按预期工作,将获得奖励积分。

    import React from "react";

    export default class TestInterval extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                countDown: this.props.countDown, // An integer from father component
            }
        }

        timer = () => {
            setInterval(() => {
                if (this.state.countDown === 0) {
                    this.stopCountDown();
                }
                this.setState( prevState => ({
                    countDown: prevState.countDown - 1, 
                }));
            }, 1000)
        }

        startCountDown = () => {
            this.timer();
        }

        stopCountDown = () => {
            clearInterval(this.timer); // Not working
        }

        render () {
            return (
                <div>
                    <button onClick={this.startCountDown}>
                        Start Countdown
                    </button>
                    <p>{this.state.countDown}</p>
                </div>
            );
        }
    }

您需要存储从返回的间隔引用setInterval.
来自docs:

它返回一个唯一标识该间隔的间隔 ID,因此 您可以稍后通过调用clearInterval()将其删除。

所以你的代码应该像这样:

this.interval = setInterval(() => {...

然后清除它:

 clearInterval(this.interval);

我会在状态真正设置后检查条件(setState是异步的)你可以在回调中完成setState.

this.interval = setInterval(() => {
      this.setState(prevState => ({
        countDown: prevState.countDown - 1,
      }), () => {
        if (this.state.countDown === 0) {
          this.stopCountDown();
        }
      });
    }, 1000)

运行示例:

class TestInterval extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      countDown: this.props.countDown, // An integer from father component
    }
  }

  timer = () => {
    this.interval = setInterval(() => {
      this.setState(prevState => ({
        countDown: prevState.countDown - 1,
      }), () => {
        if (this.state.countDown === 0) {
          this.stopCountDown();
        }
      });
    }, 1000)
  }

  startCountDown = () => {
    this.timer();
  }

  stopCountDown = () => {
    clearInterval(this.interval); // Not working
  }

  render() {
    return (
      <div>
        <button onClick={this.startCountDown}>
          Start Countdown
                    </button>
        <p>{this.state.countDown}</p>
      </div>
    );
  }
}

ReactDOM.render(<TestInterval countDown={3} />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 类中的清除间隔 的相关文章

  • model.save() 返回无效输出

    我正在使用本文中的 Node js mongodb 和express 对 REST Api 进行简单测试 MERN 第一部分 使用 Node js 和 Express 构建 RESTful API https medium com week
  • nuxt如何访问javascript文件中的env

    我无法在 nuxt 2 15 之外访问我的环境变量 当我部署时我可以看到 nuxt context config在浏览器中有正确的变量 但在自定义js文件中我无法访问process env baseURL它返回未定义 nuxt config
  • iOS Javascript DOM“冻结?”

    这里有几个问题 有没有办法阻止 iOS 在滚动时冻结页面上的 javascript 当您在另一个选项卡中或切换应用程序时 iOS 是否会冻结 JavaScript iOS 上还有其他主要的 javascript 限制吗 iOS 6 x 会暂
  • Highcharts 奇怪的分组行为

    我正在使用延迟加载 http www highcharts com stock demo lazy loading加载 OHLC 数据的方法 在服务器端 我使用 Python MySQL 并有 4 个包含 OHLC 数据的表 时间间隔为 5
  • 使用 Mongoose 在 JSLint 中抑制“需要一个标识符,而是看到“默认”(保留字)”

    我在用着jshint验证我的 JavaScript 文件 在服务器端 我使用 Node js 和 Mongoose 在 Mongoose 中 我被鼓励以如下方式编写模式 var UserSchema new mongoose Schema
  • 克隆元素对应表单中所有元素的事件

    我成功克隆了表行 其中包含从数据库检索的值 不过我对它没有什么问题 我对所有元素使用了类 因为克隆会重复 ID 不会出现问题 因为它无法唯一地定位每个元素 使每个元素 行在这里唯一的方法是什么 功能如何工作 当第一次选择框时 所选 ID 的
  • 为什么Google的闭包库不使用真正的私有成员?

    我成为 JavaScript 开发人员已经有一段时间了 我一直认为在 JavaScript 中实现私有成员的正确方法是使用 Doug Crockford 在这里概述的技术 http javascript crockford com priv
  • flexslider 中的 GIF 滑块,如何仅在滑块上时开始 gif

    现在我有一个带有四个幻灯片的 Flexslider 第三个滑块是 gif 而不是像其他滑块一样是 jpg 我遇到的问题是 第三个 gif 滑块显然在到达页面时立即启动 而不是在您实际到达该滑块时启动 当点击前两个滑块时 gif 就快完成了
  • 监听外部事件。 Bash 到 NodeJS 的桥梁

    在 NodeJS 进程内部 我如何监听来自 bash 的事件 例如 NodeJS side obj on something function data console log data Bash side do something Hel
  • Google App Script postMessage 与收件人窗口的来源不匹配

    我有一个 Google App 脚本部署为Web应用程序 https developers google com apps script guides web 它工作正常 直到今天晚上我发现它无法在 Firefox 或 Chrome 中加载
  • CKEDITOR.styleSet.add - 'a' 元素的新样式

    由于某种原因如果我改变 p to a 它不再出现在样式列表中 有什么理由吗 CKEDITOR stylesSet add default name Wys wiersza 1 element p styles line height 18p
  • 如何使用 JS/Puppeteer 上传文件

    我试图弄清楚如何将图片文件上传到输入对话框中 不可能只输入名称并按 Enter 键 因为我没有找到使用 Puppeteer 实现自动化的方法 我想我必须设置一些值作为图片 但我不知道该怎么做 有任何想法吗 您使用上传文件elementHan
  • 如何使用Javascript获取ASP.NEt Web Forms标签的值?

    我有以下标签控件
  • 新部署后,React 应用程序必须清除浏览器缓存

    我们正在使用 Jenkins 管道在 apache 服务器上部署 React 应用程序 当我们部署新代码时 大多数新功能都可以正常工作 但并非所有更改都反映浏览器中的最新内容 用户必须打开隐身窗口或清除缓存才能看到新功能 我见过一些相关的解
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • 谷歌绘制具有相同比例的多个系列的图表

    我正在寻找一种在图形上显示多个系列的方法 这些系列具有相同的比例但仅显示一次 正如你在这里看到的 http jsfiddle net Youkoal d3xwnqdu http jsfiddle net Youkoal d3xwnqdu 我
  • CSS 或 Javascript - 如果背景图像未加载,则显示后备文本[重复]

    这个问题在这里已经有答案了 如果徽标图形文件未加载或丢失 如何显示文本而不是徽标 我有带有背景 PNG 图像的 div div class iHaveBgImage this text should be displayed if bg i
  • 带有延迟的 jQuery 切换类只能运行一次

    当涉及到 jQuery 匿名函数和延迟时 我显然错过了一些基本的东西 下面的代码每次页面加载只能运行一次 它将添加该类 然后在 1 秒后将其删除 如果我再次单击 它将添加该类 但在页面持续时间内永远不会删除该类 除非我重新加载页面 var
  • 跨浏览器相当于explicitOriginalTarget事件参数

    有谁知道跨浏览器等价于explicitOriginalTarget事件参数 该参数是 Mozilla 特定的 它为我提供了导致模糊的元素 假设我的页面上有一个文本输入和一个链接 文本输入具有焦点 如果我点击链接 文本输入的模糊事件会通过ex
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节

随机推荐

  • 设置“图像文件执行选项”将始终默认打开指定的 exe 文件

    As 这个链接建议 我要替换Notepad exe with Notepad2 exe using 图像文件执行选项 通过运行命令来实现 reg add HKLM Software Microsoft Windows NT CurrentV
  • 方法 openOrCreateDatabase(String, int, null) 未定义

    我正在尝试按如下方式打开数据库 SQLiteDatabase myDatabase myDatabase openOrCreateDatabase sudoku db Context MODE PRIVATE null 当我在 Servic
  • 在数据库表中动态添加列的设计模式

    用户希望在 UI 中动态添加新字段 这个新字段应该存储在数据库中 并且应该允许他们对其执行 CRUD 现在我可以通过指定 XML 来完成此操作 但我想要一种更好的方法来搜索这些新列 还有开枪的想法ALTER声明并添加新列似乎是错误的 任何人
  • Sharepoint:基于另一个列表的计算列

    我可能正在寻找错误的方法来做到这一点 但我在这里 我有一个 Sharepoint 列表 标题为 行程 其中包含安排到特定区域的行程列表 我有第二个列表 区域 其中包含固定数量的项目 每个项目代表一个特定区域 区域有一个标题为 条件 的列 描
  • Robolectric 启动期间反射出现 NullPointerException - 有任何提示吗?

    我正在 Eclipse 上开发一个 Android 项目 并且我正在尝试从在模拟器 设备上运行测试 即very慢 到机器人电动 我用 Robolectric 替换了 Android 库 将 JUnit 添加到路径中 将测试用例改回常规Tes
  • 使用Java从串口读取文件

    我是Java初学者 我正在写 FLASH getbytes 像这样serialport 之后我会得到FLASH OK作为回应 我必须再次发送文件请求 之后我会得到回复FILE OK然后我已读取文件直至文件末尾 我不知道如何做到这一点 所以请
  • 提高python中重心坐标计算的效率

    背景 我试图将一张脸扭曲成另一张不同形状的脸 为了将一张图像扭曲为另一张图像 我使用了面部标志的 delaunay 三角剖分 并将一幅肖像的三角形扭曲为第二幅肖像的相应三角形 我使用重心坐标系将三角形内的点映射到另一个三角形上相应的扭曲位置
  • 如何将 mingw-w64 和 MSYS2 与 eclipse 或 codeblocks 等 IDE 一起使用?

    我安装 msys2here 我下载i686 5 3 0 release posix dwarf rt v4 rev0 from here 设置后msys2 i686 20160205 exe 提炼i686 5 3 0 release pos
  • 我的 xpage 应用程序的基本 REST 服务

    我想为我的 XPage 应用程序设置一些基本的 REST 服务 因此 我在 xpage 上添加了 xe restService 控件 并选择 xe customRestService 其中我引用了 Java 类
  • 禁用时更改 FAB 背景颜色

    我试图弄清楚如何在按下浮动操作按钮后禁用 2 秒的持续时间时更改浮动操作按钮的背景颜色 我还希望它在 2 秒持续时间结束时恢复到原来的颜色 这是按下时 2 秒延迟的代码 此代码位于 MainActivity 内的一个片段中 appBar s
  • 如何根据 StatefulSets 中的序数索引将参数传递给 pod?

    是否可以根据 Pod 在 StatefulSet 中的序号索引将不同的参数传递给 Pod 在 StatefulSets 文档上没有找到答案 谢谢 推荐方式参见https kubernetes io docs tasks run applic
  • SonarQube 支持 Java 8 吗?

    使用 Java 8 执行gradle sonarRunner显示此错误消息 声纳Qube版本 4 2 1 java lang ArrayIndexOutOfBoundsException 26721 at org objectweb asm
  • 决赛选手有什么用?

    我已经用 NET 编程四年了 主要是 C 并且广泛使用 IDiposable 但我尚未发现需要终结器 决赛选手有什么用 终结器是确保正确清理某些内容的最后一搏 通常为包装对象保留不受管理的资源 例如非托管句柄等不会被垃圾收集 编写终结器确实
  • 设置 Git 远程 SSH (git-upload-pack / git-receive-pack)

    我有一台具有 SSH 访问权限的服务器 我想在那里放置一个 Git 原始存储库 我刚刚在本地创建了一个 bare shared 存储库 并将其复制到每个 SCP 的服务器上 现在我想根据 SSH url 克隆这个存储库 我试过 ssh US
  • PHP 将字符串转换为 slug

    将文本字符串转换为 slug 的最佳方法是什么 意义 允许使用 alpha 转换为小写 允许数字 应消除空格 而不是转换为破折号 重音字符被等效的标准字母替换 不允许使用其他字符 应将其删除 我在网上找到了大量代码 但它们都倾向于将空格转换
  • 熊猫:分组列出

    我有如下数据 id value time 1 5 2000 1 6 2000 1 7 2000 1 5 2001 2 3 2000 2 3 2001 2 4 2005 2 5 2005 3 3 2000 3 6 2005 我的最终目标是将数
  • 使用 jQueryUI 的新自动完成功能的多列结果的快速示例?

    我刚刚发现jQueryUI 现在拥有自己的内置自动完成组合框 好消息 不幸的是 我发现的下一件事是 使其成为多列似乎并不那么简单 至少通过文档 有一个在这里发帖有人提到他们已经做到了 甚至提供了代码 但我无法理解他们的一些代码在做什么 我只
  • SecItemAdd 和 SecItemCopyMatching 返回错误代码 -34018 (errSecMissingEntitlement)

    有时 当我从 Xcode 在设备上运行应用程序时 我会尝试访问钥匙串 但由于错误 34018 而失败 这与任何记录的钥匙串错误代码都不匹配 并且无法一致地重现 大概有 30 的时间发生 我不清楚为什么会发生 完全缺乏文档使得调试这个问题变得
  • 如何更改/更新/删除 Spring ConfigurableEnvironment 中的属性

    在 Spring 中 您可以使用注入环境对象来读取所有环境属性 Resource private org springframework core env Environment environment 所以问题是我可以以编程方式更改某些属
  • React 类中的清除间隔

    因此 我们有这个简单的 React 组件 它从父组件接收一个整数 单击该按钮后 我们会在屏幕上显示整数并开始倒计时 问题是如何停止倒计时 在阅读其他 SO 帖子时 我发现了clearInterval 但似乎我在这里遗漏了一些东西 任何帮助将