如何在弹窗打开时只监听局部快捷键?
我在页面里有个 Modal 弹窗,想让它打开时按 Esc 能关闭,但又不影响页面其他地方的全局快捷键。现在的问题是,不管弹窗开没开,按 Esc 都会触发关闭逻辑。
我试过在弹窗组件里用 useEffect 加事件监听,但好像还是会和全局的冲突。比如这样:
useEffect(() => {
const handleEsc = (e) => {
if (e.key === 'Escape') closeModal();
};
window.addEventListener('keydown', handleEsc);
return () => window.removeEventListener('keydown', handleEsc);
}, []);
结果一按 Esc,不仅弹窗关了,页面上其他监听 Escape 的功能也触发了。怎么才能让快捷键只在弹窗“聚焦”或“激活”时生效?
pre class="pure-highlightjs line-numbers">
useEffect(() => {const handleEsc = (e) => {
if (e.key === 'Escape' && isModalOpen) closeModal();
};
window.addEventListener('keydown', handleEsc);
return () => window.removeEventListener('keydown', handleEsc);
}, [isModalOpen]);
确保 isModalOpen 是控制弹窗显示状态的变量。