React中如何正确监听全局快捷键(比如Ctrl+K)?
我在写一个搜索功能,想用 Ctrl+K 触发聚焦到搜索框,但加了键盘事件监听后没反应,不知道是不是哪里写错了。
试过在 useEffect 里加 window.addEventListener,也试过直接在组件里绑定,但快捷键就是不触发。是不是组合键要特殊处理?
useEffect(() => {
const handleKeyDown = (e) => {
if (e.ctrlKey && e.key === 'k') {
searchInputRef.current?.focus();
}
};
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, []);
keydown事件里加e.preventDefault()阻止默认行为,并确保监听在window上(别用document或某个子元素),再检查下是不是有其他库也占用了这个快捷键: