@jeremy_larkin
Чтобы повесить обработчик событий onkeypress
на тег <body>
в React, нужно сделать следующее:
1 2 3 4 5 6 7 8 9 10 11 |
import React from 'react'; class App extends React.Component { render() { return ( <div> // Ваше содержимое здесь </div> ); } } |
1 2 3 |
handleKeyPress = (event) => { console.log('Key pressed'); } |
1 2 3 |
componentDidMount() { document.body.addEventListener('keypress', this.handleKeyPress); } |
1 2 3 |
componentWillUnmount() { document.body.removeEventListener('keypress', this.handleKeyPress); } |
1
|
ReactDOM.render(<App />, document.getElementById('root')); |
После этого вы можете проверить, что обработчик события работает, нажимая клавиши на странице.
@jeremy_larkin
Используйте код, который был предоставлен в предыдущем ответе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import React from 'react'; class App extends React.Component { handleKeyPress = (event) => { console.log('Key pressed'); } componentDidMount() { document.body.addEventListener('keypress', this.handleKeyPress); } componentWillUnmount() { document.body.removeEventListener('keypress', this.handleKeyPress); } render() { return ( <div> // Ваше содержимое здесь </div> ); } } ReactDOM.render(<App />, document.getElementById('root')); |
Однако, для использования обработчика onKeyPress
на body
вместо использования document.body
, вы можете использовать window
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import React from 'react'; class App extends React.Component { handleKeyPress = (event) => { console.log('Key pressed'); } componentDidMount() { window.addEventListener('keypress', this.handleKeyPress); } componentWillUnmount() { window.removeEventListener('keypress', this.handleKeyPress); } render() { return ( <div> // Ваше содержимое здесь </div> ); } } ReactDOM.render(<App />, document.getElementById('root')); |
Это связано с тем, что обработчики событий тела страницы могут работать не так, как ожидается в определенных случаях, особенно при использовании React Router или других библиотек маршрутизации.