当前位置:首页 > 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 和原生键盘事件实现:

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

组件式声明:

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()
  • 生产环境应考虑热键冲突问题
  • 移动端需额外处理触摸事件
  • 复杂组合键建议使用第三方库简化实现

性能优化

对于高频触发的热键:

react实现热键

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

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

相关文章

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

理解如何react

理解如何react

理解React的核心概念 React是一个用于构建用户界面的JavaScript库,专注于通过组件化开发提高代码的可维护性和复用性。其核心思想包括虚拟DOM(Virtual DOM)和单向数据流,能够…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…