在反应打字稿中全局检测按键?

问题描述 投票:0回答:2

我想检测整个网站上的按键,即全局监听按键。我尝试在 React 中添加 onKeyDown 属性,但它没有捕获全局事件

<div onKeyPress={(e) => console.log(e)}>
    <MainLayout visualizerMode={true} />
</div>
reactjs typescript dom-events
2个回答
3
投票

这可以通过在文档对象中监听

onKeyDown
类型事件来实现。

将其添加到您的反应组件中:

useEffect(() => {
    document.addEventListener('keydown', (e: KeyboardEvent) => console.log(e))
}, [])

希望对您有帮助!


0
投票

您应该使用析构函数,否则您将通过组件重新渲染来重复事件。

const doStuff = useCallback(
    (e: KeyboardEvent) => {
      {....}
    },
    [],
  );

  useEffect(() => {
    document.addEventListener('keydown', doStuff);

    return () => {
      document.removeEventListener('keydown', doStuff);
    };
  }, [doStuff]);
© www.soinside.com 2019 - 2024. All rights reserved.