React上的全局键盘事件

时间:2018-10-28 16:24:59

标签: reactjs addeventlistener

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

1 个答案:

答案 0 :(得分:1)

您可以在窗口的最顶部组件keydown上添加一个componentDidMount侦听器。

示例

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>