react press onkeypressed onkey event charcode reactjs events keypress keydown

reactjs - press - react input keyup event



El evento onKeyDown no funciona en divs en React (3)

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 en estilo React. Lo intenté

onKeyDown={this.onKeyPressed}

en el componente Pero no reacciona. Funciona en elementos de entrada como recuerdo.

Codepen: http://codepen.io/lafisrap/pen/OmyBYG

¿Cómo puedo hacerlo?


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


Estás pensando demasiado en Javascript puro. Deshágase de sus oyentes en esos métodos de ciclo de vida React y use event.key 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={(e) => this.onKeyPressed(e)} > <div className="light-circle"> <div className="image-wrapper"> <img src={IMG_URL+player.img} /> </div> </div> </div> ) }


Necesitas escribirlo de esta manera

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

Si onKeyPressed no está vinculado a this , intente reescribirlo utilizando la función de flecha o vincularlo en el constructor componentes.