首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每按一次键,OnKeyDown listener调用6次

每按一次键,OnKeyDown listener调用6次
EN

Stack Overflow用户
提问于 2020-03-08 17:03:45
回答 2查看 101关注 0票数 0

我已经在我的组件的文档中添加了一个onKeyDown事件侦听器。它可以工作,但每次按键事件都会被调用6-7次。在这一点上,这是非常基本的,我所做的一切都是在控制台上记录事件,所以不确定到底做错了什么。

这是我的组件:

代码语言:javascript
复制
import React, { useEffect } from "react";

const ActionButtons = ({ shuffleClick, keepClick }) => {
  const handleKeyDown = e => {
    console.log(e);
    console.log("this function was called")
  };

  componentDidMount(){

  }

  useEffect(() => {
    document.addEventListener("keydown", handleKeyDown);
  });

  return (
    <div className="flex-group-spaced-around small-margin-top">
      <div className="shuffler__button clickable" onClick={shuffleClick}>
        <p>Shuffle</p>
      </div>

      <div className="shuffler__button clickable" onClick={keepClick}>
        <p>Keep</p>
      </div>
    </div>
  );
};

export default ActionButtons;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-08 17:26:23

您的ActionButton组件可能在文档中被多次挂载。这意味着对于每个ActionButton实例,都会在文档上注册一个事件侦听器。

重写事件处理程序以确保正在侦听单个全局事件。

票数 1
EN

Stack Overflow用户

发布于 2020-03-08 17:20:49

首先,如果你使用了React钩子,你的"componentDidMount()“就不应该出现在这里。对于您的问题,"useEffect“正在转换"componentDidMount()”和"componentDidUpdate()“。所以,可能是因为你没有完成你的函数,"componentDidUpdate()“继续这样做。

试试这个:

代码语言:javascript
复制
useEffect(() => {
    document.addEventListener("keydown", handleKeyDown);
}, []);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60585959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档