Comment détecter la pression de la touche Echap sur reactjs? La chose similaire à jquery
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key maps to keycode `27`
// <DO YOUR WORK HERE>
}
});
Une fois détecté, je veux transmettre les composants d'informations. J'ai 3 composants dont le dernier composant actif doit réagir à la pression de la touche d'échappement.
Je pensais à une sorte d'enregistrement lorsqu'un composant devient actif
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>
)
}
}
et sur tous les composants
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)}/>
)
}
}
Je crois que cela fonctionnera, mais je pense que ce sera plus comme un rappel. Y a-t-il une meilleure façon de gérer cela?
Réponses:
Si vous recherchez une gestion des événements de clé au niveau du document,
componentDidMount
la meilleure méthode est de la lier pendant (comme le montre l'exemple codepen de Brad Colthurst ):Notez que vous devez vous assurer de supprimer l'écouteur d'événements de clé lors du démontage pour éviter les erreurs potentielles et les fuites de mémoire.
EDIT: Si vous utilisez des hooks, vous pouvez utiliser cette
useEffect
structure pour produire un effet similaire:la source
addEventListener
etremoveEventListener
?focus
. Ce n'est pas pertinent pourkeydown
, mais il n'était pas facultatif , il est donc généralement spécifié pour la compatibilité avec IE <9.this.escFunction
dans une fonction commefunction() { this.escFunction(event) }
, sinon il s'exécutait au chargement de la page sans aucun "keydown".Vous voudrez écouter les évasions
keyCode
(27) du ReactSyntheticKeyBoardEvent
onKeyDown
:Le CodePen de Brad Colthurst publié dans les commentaires de la question est utile pour trouver des codes clés pour d'autres clés.
la source
onKeyPress
événement lorsque la touche enfoncée est ESC et que le focus est à l'intérieur<input type="text" />
. Dans ce scénario, vous pouvez utiliseronKeyDown
etonKeyUp
, qui se déclenchent tous les deux et dans le bon ordre.Une autre façon d'accomplir cela dans un composant fonctionnel est d'utiliser
useEffect
etuseFunction
, comme ceci:Au lieu de console.log, vous pouvez utiliser
useState
pour déclencher quelque chose.la source
React utilise SyntheticKeyboardEvent pour encapsuler l'événement de navigateur natif et cet événement Synthetic fournit un attribut de clé nommé ,
que vous pouvez utiliser comme ceci:
la source
e.key
pourEscape
revient commeEsc
#triggeredPour une solution de crochet React réutilisable
Usage:
la source