You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在按下Escape键时关闭React Tooltip?

问题分析:@react-tooltip 4.2 无法通过Escape键关闭Tooltip

你写的代码存在两个核心问题,导致Escape键关闭Tooltip的逻辑失效:

1. eventOff 属性不支持escape事件

在@react-tooltip 4.2版本中,eventOff仅支持鼠标相关事件(比如click、mouseleave等),不支持键盘事件。你设置eventOff="escape"是无效的,因为组件本身没有把键盘事件纳入eventOff的处理逻辑中。

2. globalEventOff 配置错误

globalEventOff的作用是指定全局范围内触发关闭Tooltip的事件,但4.2版本的该属性同样不支持escape作为有效值,可选值和eventOff一致,都是鼠标类事件。因此将escape加入globalEventOff数组也不会产生预期效果。

正确实现方式

要实现Escape键关闭Tooltip,需要手动监听键盘事件,结合组件API控制显示状态:

方式一:手动维护显示状态

import React, { useState, useEffect } from 'react';
import ReactTooltip from '@react-tooltip';

const YourComponent = () => {
  const [tooltipOpen, setTooltipOpen] = useState(false);

  useEffect(() => {
    const handleEscape = (e) => {
      if (e.key === 'Escape') {
        setTooltipOpen(false);
      }
    };

    window.addEventListener('keydown', handleEscape);
    return () => window.removeEventListener('keydown', handleEscape);
  }, []);

  return (
    <>
      {/* 触发Tooltip的元素,绑定事件控制显示 */}
      <div 
        data-tip="tooltip" 
        onMouseEnter={() => setTooltipOpen(true)}
        onMouseLeave={() => setTooltipOpen(false)}
      >
        鼠标悬停查看提示
      </div>
      <ReactTooltip 
        id="tooltip" 
        effect="solid" 
        role="status"
        isOpen={tooltipOpen}
      >
        Some Content
      </ReactTooltip>
    </>
  );
};

export default YourComponent;

如果是点击触发Tooltip,只需把触发元素的事件换成onClick={() => setTooltipOpen(!tooltipOpen)}即可。

方式二:直接调用组件隐藏方法

无需维护状态,直接使用ReactTooltip.hide()关闭:

import React, { useEffect } from 'react';
import ReactTooltip from '@react-tooltip';

const YourComponent = () => {
  useEffect(() => {
    const handleEscape = (e) => {
      if (e.key === 'Escape') {
        // 关闭指定id的Tooltip,不传id则关闭所有
        ReactTooltip.hide('tooltip');
      }
    };

    window.addEventListener('keydown', handleEscape);
    return () => window.removeEventListener('keydown', handleEscape);
  }, []);

  return (
    <>
      <div data-tip="tooltip">鼠标悬停查看提示</div>
      <ReactTooltip 
        id="tooltip" 
        effect="solid" 
        role="status"
      >
        Some Content
      </ReactTooltip>
    </>
  );
};

export default YourComponent;

内容的提问来源于stack exchange,提问作者nikhil024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:12