Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在响应组件卸载时停止JavaScript事件?

如何在响应组件卸载时停止JavaScript事件?
EN

Stack Overflow用户
提问于 2018-09-25 06:54:01
回答 1查看 391关注 0票数 0

背景:

我有一个用React构建的web应用程序(目前为16.4.2节)。它只会在触摸屏上使用。它是由大量的按钮组成的,因为它都是触摸的,所以我使用touchstart/touchend来处理这些操作。

示例:--这是我如何使用事件的基本示例。单击一个按钮,它将this.state.exampleRedirect设置为true,这反过来使组件重新呈现,然后转到新页面(使用router)。一切都很顺利。

代码语言:javascript
运行
AI代码解释
复制
<button
  type='button'
  onTouchStart={() => this.setState({ exampleRedirect: true })}
  className='o-button'>
  Open modal
</button>

发行:

我最初使用onClick来处理按钮,但有一些问题,因为我的用户手指粗壮,没有太多的技术背景,当他们按下按钮时,他们会把手指拖到按钮上,这样就不会触发点击。OnTouchStart通过触发任何触摸发生的一分钟(拖动、滑动、点击等)来解决这个问题。

问题在于onTouchStart。用户触摸按钮,它会迅速改变页面(使用路由器)并重新呈现新页面。该应用程序速度很快,因此这几乎是即时的,这意味着当新页面加载时,用户的手指通常仍在屏幕上,从而在他们所触摸的任何东西上触发另一个触摸事件。这通常是另一个路由按钮,所以它只是通过屏幕,直到他们举起他们的手指。

我正在通过在每个页面加载上设置启用按钮的延迟来解决这个问题。

代码语言:javascript
运行
AI代码解释
复制
// example component
import React, { Component } from 'react';

class ExampleComponent extends Component {
  state = { buttonsDisabled: true }

  // after 300ms, the buttons are set to enabled (prevents touch events 
  // from firing when the page first loads
  componentWillMount() {
    timeoutId = setTimeout(() => {
      this.setState({ buttonsDisabled: false });
    }, 300);
  }

  render() {
    return (
      // button in render method
      <button
        disabled={this.state.buttonsDisabled}
        type='button'
        onTouchStart={() => this.setState({ exampleRedirect: true })}
        className='o-button'>
        Open modal
      </button>
    );
  }

有更好的办法吗?或者做我正在做的事情,但在全球范围内,这样我就不必在大约100个组件中添加这个jankity代码了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-25 07:57:42

与其使用当触点放置在触摸面上时触发的onTouchStart事件,而且使用超时(这有点麻烦),您还应该使用onTouchEnd,因为当触摸点从触摸表面移除时,它将被触发,从而确保上述情况不会发生。

代码语言:javascript
运行
AI代码解释
复制
// example component
import React, { Component } from 'react';

class ExampleComponent extends Component {
  state = { buttonsDisabled: true }

  // after 300ms, the buttons are set to enabled (prevents touch events 
  // from firing when the page first loads
  componentWillMount() {
    timeoutId = setTimeout(() => {
      this.setState({ buttonsDisabled: false });
    }, 300);
  }

  render() {
    return (
      // button in render method
      <button
        disabled={this.state.buttonsDisabled}
        type='button'
        onTouchEnd={() => this.setState({ exampleRedirect: true })}
        className='o-button'>
        Open modal
      </button>
    );
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52501140

复制
相关文章
在 Ubuntu 中安装 DHCP 服务器
1、 运行下面的命令来安装 DHCP 服务器包,也就是 dhcp3-server。
用户4988085
2021/09/15
7.6K0
在服务器(Windows)中开启声音
1.使用远程桌面连接服务器,进入服务器以后右键单击开始,选择运行 image.png 2. 点击运行之后,在输入框内输入:gpedit.msc image.png 3、打开之后,依次点击:计算机配置--管理模板--windows组件--远程桌面服务--远程桌面会话主机--设备和资源重定向--左键双击允许音频录制重定向--选择已启用后点应用。 image.png image.png image.png image.png image.png 4.点击服务器管理器,找到工具,打开服务 image.png ima
逸轩
2021/10/29
16.3K0
在 Node 中调用 Python
在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。
凌虚
2020/07/17
5.8K0
在服务器上运行Python项目
Anaconda是一个开源Python发行版本,包括Python 和很多常用库如Numpy、Matplotlib等,对小白很方便
Minerva
2020/05/25
4.2K0
在Java中调用Python
在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结。
编程随笔
2019/09/11
5.2K0
在Java中调用Python
在 Ubuntu 中 安装python
virtualenvwrapper: 基于 virtualenv 之上的一个工具,通过它可以方便的创建/激活/管理/销毁虚拟环境,没它的话进行上面的操作将会相当麻烦。
py3study
2020/01/09
2.4K0
在 Python 中解析 JSON 数据
json模块是Python 标准库的一部分,它允许你对 JSON 数据进行编码和解码。
雪梦科技
2020/06/28
17.3K0
在windows中:双击运行Python
一、安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退。怎样避免闪退呢?
py3study
2020/01/06
4.6K0
在windows中:双击运行Python
在 Python 中播放声音
我们首先检查playsound库,它为在Python中播放声音文件提供了一个简单直接的解决方案。凭借其最低的设置要求,开发人员可以使用单个函数调用将音频播放快速集成到他们的应用程序中。但是,对于更高级的音频功能,我们深入研究了两个流行的库:pygame和pyglet。Pygame是一个强大的多媒体库,以其处理音频,图形和用户输入的能力而闻名。
很酷的站长
2023/08/11
8940
在 Python 中播放声音
在C++中调用Python
虽然现在Python编程语言十分的火爆,但是实际上非要用一门语言去完成所有的任务,并不是说不可以,而是不合适。在一些特定的、对于性能要求比较高的场景,还是需要用到传统的C++来进行编程的。但是C++的一个缺点是比较难找到很好的轮子,这也是很多人专用Python的一个重要原因。这篇文章我们要介绍的是一个比较特殊的场景——用C++的代码去调用Python函数中实现的一些功能。这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。这两种不同的使用方法各有优劣,但是如果以Python为主导,就很难避开GIL的问题,这里我们就不过多的展开。
DechinPhy
2021/05/27
4.3K0
python在sqlite中插入数据
python通过引入sqlite的包,就能够直接操作sqlite数据库 import sqlite3 import math cx=sqlite3.connect("mydatabase.sqli
py3study
2020/01/06
4K0
在LaTeX中插入python代码
老师突然要求交上去的论文需要在附录加上代码,奈何我使用的LaTeX模板只能高亮显示Matlab的代码,但是我写论文的时候绝大部分代码都是用Python写的在这里实名吐槽一下Matlab的数据处理功能这么拉跨,不知道为什么还被拿来当数据挖掘课的第一语言,没办法,只能找一个方法让LaTeX里面能高亮显示Python代码。
Hsinyan
2022/06/19
6.8K0
在LaTeX中插入python代码
getopt在Python中的使用
在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为”-“加上单个字母选项;长选项为”–“加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。
全栈程序员站长
2022/08/13
7K0
在Linux/CentOS中编译安装Python
心血来潮,想学习一下Python,听说用来做爬虫还不错。先从运行环境开始入手,CentOS中已经内置了Python,但版本似乎比较老,通过python -V命令看到版本是2.4.3。目前Python 2.x的最新版本号是2.7.8,那么就开始动手升级一下。
魏杰
2022/12/23
7280
Python在HiveQL中的运用
在写HiveQL的时候,往往发现内置函数不够用,Hive支持用户自定义函数UDF,使用Java进行开发。很多时候这显得过于繁重。因而Hive中提供了Transform机制(基于hadoop streaming),这种机制相当于提供了一个脚本程序的入口,因此我们可以很方便的使用shell、perl、python等语言进行开发。
py3study
2020/01/13
1.6K0
在latex中写python代码
大家都知道,python现在用的是越来越多了,功能强大,易于上手,如果能借助于其强大的绘图功能,latex岂不碉堡了?
py3study
2020/01/07
2K0
在latex中写python代码
在 Xcode 9 中搭建 Python
macOS、Xcode 9、Python(macOS 默认安装了 Python2.7)。
py3study
2020/01/09
1.8K0
在Python中如何使用Elasticsearch?
在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。
马哥linux运维
2019/06/10
8.2K0
在Python中如何使用Elasticsearch?
在Python中定义Main函数
多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。
程序员皮克
2021/12/29
4K0
Python在日常中的使用
今天想要整理下电脑硬盘的文件,只要一些有用的方便共享,然后发现文件组织结构是这个样子的
数据处理与分析
2019/07/31
9.5K0
Python在日常中的使用

相似问题

Python3中的Pinging服务器

11

在python中Pinging网络设备

119

在C++中Pinging服务器

10

Python pinging本地IP

111

在Java中更快地Pinging服务器?

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档