Giới thiệu TanStack Hotkeys
TanStack Hotkeys là thư viện giúp bạn thêm phím tắt bàn phím vào ứng dụng web. Bạn dùng nó khi dashboard, editor, command palette hoặc trang quản trị cần thao tác nhanh bằng bàn phím. TanStack Hotkeys phù hợp với React và Next.js vì thư viện cung cấp hook nhưuseHotkey, useHotkeySequence, useHotkeyRecorder, useKeyHold và các hàm hiển thị shortcut như formatForDisplay.
TanStack Hotkeys đang được ghi nhãn alpha trên tài liệu chính thức. Nếu dùng cho production, hãy kiểm tra kỹ hành vi phím tắt, khả năng truy cập và thay đổi API khi nâng phiên bản.
Khi nào nên dùng
Tính năng chính
Cài đặt
1
Cài package React
Chạy lệnh sau trong dự án Next.js:
2
Dùng trong client component
Các hook của TanStack Hotkeys cần chạy trong browser, nên component phải có directive
use client.Ví dụ cơ bản
Ví dụ dưới đây thêm shortcutMod+S. Trên macOS, người dùng bấm Command+S. Trên Windows/Linux, người dùng bấm Control+S.
useHotkey mặc định gọi preventDefault và stopPropagation. Vì vậy Mod+S sẽ chạy hàm onSave thay vì mở hộp thoại lưu trang của trình duyệt.
Scope shortcut theo vùng giao diện
Khi shortcut chỉ nên chạy trong một panel hoặc form cụ thể, truyềntarget bằng ref.
Bật tắt shortcut theo trạng thái
Dùngenabled khi shortcut chỉ hợp lệ trong một trạng thái nhất định.
Dùng chuỗi phím
useHotkeySequence dùng cho các lệnh cần nhiều bước, ví dụ phím tắt kiểu Vim.
timeout nếu muốn rút ngắn hoặc kéo dài thời gian chờ.
Ghi shortcut do người dùng chọn
useHotkeyRecorder phù hợp cho trang settings, nơi người dùng tự chọn shortcut.
Theo dõi phím đang được giữ
useKeyHold giúp UI phản hồi khi người dùng đang giữ một phím cụ thể.
Lưu ý khi dùng trong Next.js
- Chỉ gọi hook trong client component.
- Dùng
Modthay vì tự táchControlvàMeta. - Không ghi đè shortcut quen thuộc của trình duyệt nếu không có lý do rõ ràng.
- Luôn cho người dùng thấy shortcut bằng
formatForDisplay. - Kiểm tra shortcut khi focus đang nằm trong
input,textarea,selecthoặc vùngcontentEditable. - Với dialog, modal và panel, ưu tiên dùng
enabledhoặctargetđể giới hạn phạm vi.