当前位置:首页 > React

react实现热键

2026-01-26 15:05:14React

React 实现热键的方法

使用 react-hotkeys-hook

安装依赖:

npm install react-hotkeys-hook

基本用法:

import { useHotkeys } from 'react-hotkeys-hook';

function MyComponent() {
  useHotkeys('ctrl+s', () => {
    console.log('Ctrl+S pressed');
  });

  return <div>Press Ctrl+S</div>;
}

支持组合键:

useHotkeys('shift+a, shift+b', () => {
  alert('Shift+A or Shift+B pressed');
});

原生事件监听

通过 useEffect 和原生键盘事件实现:

react实现热键

import { useEffect } from 'react';

function HotkeyHandler() {
  useEffect(() => {
    const handleKeyDown = (e) => {
      if (e.ctrlKey && e.key === 's') {
        e.preventDefault();
        console.log('Ctrl+S pressed');
      }
    };

    document.addEventListener('keydown', handleKeyDown);
    return () => document.removeEventListener('keydown', handleKeyDown);
  }, []);

  return null;
}

使用 react-shortcuts

安装:

npm install react-shortcuts

组件式声明:

react实现热键

import { Shortcuts } from 'react-shortcuts';

function MyComponent() {
  const handleShortcuts = (action) => {
    switch (action) {
      case 'SAVE':
        console.log('Save action triggered');
        break;
    }
  };

  return (
    <Shortcuts
      name="GLOBAL"
      handler={handleShortcuts}
      shortcuts={{
        SAVE: 'ctrl+s',
      }}
    />
  );
}

热键作用域控制

react-hotkeys-hook 支持作用域隔离:

useHotkeys('ctrl+s', () => {
  // 仅当焦点在指定元素时触发
}, { enableOnTags: ['INPUT'] });

自定义 Hook 封装

创建可复用的热键 Hook:

function useCustomHotkey(key, callback, dependencies = []) {
  useEffect(() => {
    const handler = (e) => {
      if (e.key === key && e.ctrlKey) {
        callback();
      }
    };
    window.addEventListener('keydown', handler);
    return () => window.removeEventListener('keydown', handler);
  }, dependencies);
}

// 使用示例
useCustomHotkey('s', () => {
  alert('Ctrl+S pressed');
});

注意事项

  • 阻止浏览器默认行为时需调用 e.preventDefault()
  • 生产环境应考虑热键冲突问题
  • 移动端需额外处理触摸事件
  • 复杂组合键建议使用第三方库简化实现

性能优化

对于高频触发的热键:

useHotkeys('*', (e) => {
  if (e.key === 'ArrowDown') {
    // 节流处理
  }
}, { throttle: 300 });

标签: 热键react
分享给朋友:

相关文章

react如何分

react如何分

React 分页实现方法 在 React 中实现分页功能可以通过多种方式完成,以下是几种常见的方法: 使用状态管理分页数据 在组件内部维护当前页码和每页数据量的状态,通过计算切片数据实现分页。…

react如何创建框架

react如何创建框架

React 创建框架的方法 React 本身是一个用于构建用户界面的 JavaScript 库,但可以通过多种方式创建框架或项目结构。以下是几种常见的方法: 使用 Create React App…

react如何引用jquery

react如何引用jquery

在React项目中引用jQuery可以通过以下方法实现: 安装jQuery依赖 通过npm或yarn安装jQuery包: npm install jquery # 或 yarn add jquer…

react如何编码参数

react如何编码参数

编码参数的方法 在React中,编码参数通常涉及URL查询参数或路由参数的编码和解码。以下是几种常见场景的处理方法: URL查询参数编码 使用encodeURIComponent对参数进行编码,避免…

如何封装表单react

如何封装表单react

封装 React 表单的方法 封装 React 表单可以通过创建可复用的表单组件或自定义 Hook 来实现。以下是几种常见的方法: 使用受控组件封装表单 通过状态管理表单数据,将表单字段的值与 Re…

react如何进阶

react如何进阶

React 进阶学习路径 深入理解 React 核心机制 学习 React Fiber 架构、协调算法(Reconciliation)和虚拟 DOM 的工作原理。掌握 React 的渲染流程,包括组件…