事件监听清除&箭头函数&传参

文章讲述了如何正确地在JavaScript中清除事件监听,指出直接使用`removeEventListener`时需要传递函数名而非函数调用,特别提到了在React中避免重复声明和使用`onKeyDown`替代`addEventListener`的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误示范

window.addEventListener('keydown', (event) => handleKeyDown(event), true);
window.removeEventListener('keydown', (event) => handleKeyDown(event), true);
  1. 这样是清除不了事件监听的,因为传进去的实质是两个不一样的函数

只传event

  1. 如果只是要传event,是比较好办的,直接写就行了,event会自己传进去
const handleKeyDown = (event: KeyboardEvent) => { // 按键处理
  console.log(event);
}
window.addEventListener('keydown', handleKeyDown, true);
window.removeEventListener('keydown', handleKeyDown, true);

不仅仅传event

  1. 在使用addEventElistener的前提下,我并没有找到方法来解决这个问题,因为想要成功清除,那么必须使用函数名作为第二个参数而不是函数调用。
  2. 但是在使用onKeydown这种监听方式的话,是有办法解决的的,因为onKeyDown这种只会有一个监听器,下一个监听会覆盖上一个监听,所以我们可以用一个“空的函数”来覆盖掉那个我们不需要的函数
  3. 而我清除监听的目的是避免react造成的重复声明,因此,使用onKeyDown就足够了,并且也不需要我手动去清除监听了。
const handleMouseDown = (event: MouseEvent, audio: HTMLAudioElement) => {
    // ...
}
progress.onmousedown = (event) => handleMouseDown(event, audio)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值