React 中如何正确监听双击事件?

程序员广运 阅读 3

我在 React 组件里想给一个 div 加双击事件,但 onDoubleClick 好像没反应,是我写错了吗?

试过直接绑定 onDoubleClick,也试过用 useRef 手动 addEventListener,但都不触发。点击倒是正常的。

function MyComponent() {
  const handleDoubleClick = () => {
    console.log('双击了!');
  };

  return (
    <div
      style={{ width: '200px', height: '200px', background: '#eee' }}
      onDoubleClick={handleDoubleClick}
    >
      点我试试双击
    </div>
  );
}
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
轩辕爱香
你的代码写法没问题,onDoubleClick 在 React 里是原生支持的。

问题很可能是双击时触发了文本选中,浏览器默认行为把事件吞了。解决方法很简单,加上 CSS 属性阻止选中文本:

function MyComponent() {
const handleDoubleClick = () => {
console.log('双击了!');
};

return (
style={{
width: '200px',
height: '200px', background: '#eee',
userSelect: 'none' // 加上这个,双击就不会触发选中文本了
}}
onDoubleClick={handleDoubleClick}
>
点我试试双击

);
}


如果你的 div 里有文字内容,双击时很容易就触发选中文本了,这会阻止双击事件正常触发。加上 userSelect: 'none' 就能解决。

还有个注意点:双击事件会先触发两次单击事件(onClick),如果你的单击事件有重要逻辑要注意区分。不过从你的描述看,单击正常双击不触发,基本就是选中文本的问题。
点赞
2026-03-10 19:05