¿Cómo detecto la pulsación de la tecla Esc en reactjs? Lo similar a jquery
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key maps to keycode `27`
// <DO YOUR WORK HERE>
}
});
Una vez detectado, quiero pasar la información a los componentes. Tengo 3 componentes de los cuales el último componente activo debe reaccionar a la pulsación de la tecla Escape.
Estaba pensando en una especie de registro cuando un componente se activa
class Layout extends React.Component {
onActive(escFunction){
this.escFunction = escFunction;
}
onEscPress(){
if(_.isFunction(this.escFunction)){
this.escFunction()
}
}
render(){
return (
<div class="root">
<ActionPanel onActive={this.onActive.bind(this)}/>
<DataPanel onActive={this.onActive.bind(this)}/>
<ResultPanel onActive={this.onActive.bind(this)}/>
</div>
)
}
}
y en todos los componentes
class ActionPanel extends React.Component {
escFunction(){
//Do whatever when esc is pressed
}
onActive(){
this.props.onActive(this.escFunction.bind(this));
}
render(){
return (
<input onKeyDown={this.onActive.bind(this)}/>
)
}
}
Creo que esto funcionará, pero creo que será más como una devolución de llamada. ¿Hay alguna forma mejor de manejar esto?
javascript
reactjs
Neo
fuente
fuente

Respuestas:
Si está buscando un manejo de eventos clave a nivel de documento, vincularlo durante
componentDidMountes la mejor manera (como lo muestra el ejemplo de codepen de Brad Colthurst ):Tenga en cuenta que debe asegurarse de eliminar el detector de eventos clave al desmontar para evitar posibles errores y pérdidas de memoria.
EDITAR: Si está usando ganchos, puede usar esta
useEffectestructura para producir un efecto similar:fuente
addEventListeneryremoveEventListener?focus. No es relevante parakeydown, pero solía no ser opcional, por lo que generalmente se especifica para compatibilidad con IE <9.this.escFunctiona una función comofunction() { this.escFunction(event) }, de lo contrario, se estaba ejecutando al cargar la página sin ninguna "tecla abajo".Querrás escuchar el escape
keyCode(27) de ReactSyntheticKeyBoardEventonKeyDown:El CodePen de Brad Colthurst publicado en los comentarios de la pregunta es útil para encontrar códigos clave para otras claves.
fuente
onKeyPressevento cuando la tecla que se presiona es ESC y el foco está adentro<input type="text" />. En ese escenario, puede usaronKeyDownyonKeyUp, ambos disparan, y en el orden correcto.Otra forma de lograr esto en un componente funcional, es usar
useEffectyuseFunction, así:En lugar de console.log, puedes usar
useStatepara activar algo.fuente
React usa SyntheticKeyboardEvent para envolver el evento del navegador nativo y este evento Synthetic proporciona un atributo clave con nombre ,
que puede usar así:
fuente
e.keyparaEscaperegresa comoEsc#triggeredPara una solución de gancho React reutilizable
Uso:
fuente