reactjs - React 上的全局键盘事件

标签 reactjs addeventlistener

我正在 React 上制作一个小型鼓机,我的想法是,当我按下键盘上的某个键时,会根据按下的键播放特定的声音。我遇到的问题是我希望 onKeyPress 或 onKeyDown 事件在窗口范围内工作,因为如果我将事件监听器放在特定组件上,则该组件必须处于焦点状态才能监听该事件。我该怎么做?

最佳答案

您可以在最顶层组件的 componentDidMount 窗口中添加一个 keydown 监听器。

示例

class App extends React.Component {
  state = { lastPressedKey: null };

  componentDidMount() {
    window.addEventListener("keydown", this.handleKeyPress);
  }

  componentWillUnmount() {
    window.removeEventListener("keydown", this.handleKeyPress);
  }

  handleKeyPress = event => {
    this.setState({ lastPressedKey: event.key });
  };

  render() {
    return <div>Key last pressed: {this.state.lastPressedKey}</div>;
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

关于reactjs - React 上的全局键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53033625/

相关文章:

javascript - 表单内的单击事件监听器

javascript - addEventListener 在使用匿名函数传入参数时为同一个句柄触发多次

javascript - 使用 addEventListener/attachEvent 注册框架的 onload 事件

javascript - 如何使用react-router导航具有多个页面的组件

reactjs - 通过 Azure Front Door 访问的存储帐户上托管的静态网站未正确加载

reactjs - Fluent UI DetailsList - 有没有办法向每一列添加过滤器

javascript - 我正在尝试让一个 div 元素跟随我的鼠标(javascript),但它一直出现故障

javascript - 触发 JavaScript 中的内置事件?

javascript - 使用 Angular 2.0 或 React 而不改变我们的构建过程?

javascript - 如何在我的 React 应用程序中正确编写 FormData?