Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

602
Views
El evento onKeyDown no funciona en divs en React

Quiero usar un evento keyDown en un div en React. Hago:

 componentWillMount() { document.addEventListener("keydown", this.onKeyPressed.bind(this)); } componentWillUnmount() { document.removeEventListener("keydown", this.onKeyPressed.bind(this)); } onKeyPressed(e) { console.log(e.keyCode); } render() { let player = this.props.boards.dungeons[this.props.boards.currentBoard].player; return ( <div className="player" style={{ position: "absolute" }} onKeyDown={this.onKeyPressed} // not working > <div className="light-circle"> <div className="image-wrapper"> <img src={IMG_URL+player.img} /> </div> </div> </div> ) }

Funciona bien, pero me gustaría hacerlo más al estilo React. Lo intenté

 onKeyDown={this.onKeyPressed}

en el componente. Pero no reacciona. Funciona en elementos de entrada según recuerdo.

Código abierto

¿Cómo puedo hacerlo?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Debe usar el atributo tabIndex para poder escuchar el evento onKeyDown en un div en React. Establecer tabIndex="0" debería activar su controlador.

over 4 years ago · Santiago Trujillo Report

0

Tienes que escribirlo de esta manera.

 <div className="player" style={{ position: "absolute" }} onKeyDown={this.onKeyPressed} tabIndex="0" >

Si onKeyPressed no está vinculado a this , intente reescribirlo usando la función de flecha o vincúlelo en el constructor del componente.

over 4 years ago · Santiago Trujillo Report

0

Estás pensando demasiado en Javascript puro. Deshágase de sus oyentes en esos métodos de ciclo de vida de React y use event.key en lugar de event.keyCode (porque este no es un objeto de evento JS, es un React SyntheticEvent ). Todo su componente podría ser tan simple como esto (suponiendo que no haya vinculado sus métodos en un constructor).

 onKeyPressed(e) { console.log(e.key); } render() { let player = this.props.boards.dungeons[this.props.boards.currentBoard].player; return ( <div className="player" style={{ position: "absolute" }} onKeyDown={this.onKeyPressed} > <div className="light-circle"> <div className="image-wrapper"> <img src={IMG_URL+player.img} /> </div> </div> </div> ) }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!