我正在React上制作一个小型鼓机,我的想法是当我按下键盘上的一个键时,会根据按下的键播放特定的声音。我遇到的问题是,我希望onKeyPress或onKeyDown事件在窗口范围内工作,因为如果我将事件侦听器放在一个特定的组件上,该组件必须处于焦点上才能侦听事件。我该如何做呢?
mwngjboj1#
您可以在最顶层组件的componentDidMount中的窗口上添加keydown侦听器。
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>
mv1qrgav2#
这将与Tholle答案示例相同,但使用React Hooks。
import {useState, useEffect} from 'react'; function App(){ const [lastPressedKey, setLastPressedKey] = useState(null); const handleKeyPress = (event) => setLastPressedKey(event.key); useEffect(() => { window.addEventListener("keydown", handleKeyPress); return () => window.removeEventListener("keydown", handleKeyPress); }, []); return <div>Key last pressed: {lastPressedKey}</div> }
2条答案
按热度按时间mwngjboj1#
您可以在最顶层组件的
componentDidMount
中的窗口上添加keydown
侦听器。mv1qrgav2#
这将与Tholle答案示例相同,但使用React Hooks。