Jak wykryć naciśnięcie klawisza Esc na reagjach? Podobnie jak w jquery
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key maps to keycode `27`
// <DO YOUR WORK HERE>
}
});
Po wykryciu chcę przekazać komponenty informacji. Mam 3 komponenty, z których ostatni aktywny składnik musi reagować na naciśnięcie klawisza Escape.
Myślałem o czymś w rodzaju rejestracji, kiedy składnik staje się aktywny
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>
)
}
}
i na wszystkich komponentach
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)}/>
)
}
}
Wierzę, że to zadziała, ale myślę, że będzie to bardziej jak oddzwonienie. Czy jest lepszy sposób na rozwiązanie tego problemu?
javascript
reactjs
Neo
źródło
źródło
Odpowiedzi:
Jeśli szukasz obsługi zdarzeń kluczowych na poziomie dokumentu,
componentDidMount
najlepszym sposobem jest powiązanie go w trakcie (jak pokazano na przykładzie kodowania Brada Colthursta ):Należy pamiętać, że podczas odmontowywania należy usunąć detektor zdarzeń kluczy, aby zapobiec potencjalnym błędom i wyciekom pamięci.
EDYCJA: Jeśli używasz haków, możesz użyć tej
useEffect
struktury, aby uzyskać podobny efekt:źródło
addEventListener
iremoveEventListener
?focus
. Nie ma to znaczenia dlakeydown
, ale kiedyś nie było opcjonalne, więc zwykle jest określone dla zgodności z IE <9.this.escFunction
w funkcję taką jakfunction() { this.escFunction(event) }
, w przeciwnym razie byłaby wykonywana przy ładowaniu strony bez żadnego "keydown".Będziesz chciał posłuchać ucieczki
keyCode
(27) z ReactSyntheticKeyBoardEvent
onKeyDown
:CodePen Brada Colthursta zamieszczone w komentarzach do pytania jest pomocne w znajdowaniu kodów kluczy dla innych kluczy.
źródło
onKeyPress
zdarzenia, gdy naciśnięty klawisz to ESC, a fokus jest w środku<input type="text" />
. W tym scenariuszu możesz użyćonKeyDown
ionKeyUp
, które strzelają, i we właściwej kolejności.Innym sposobem osiągnięcia tego w komponencie funkcjonalnym jest użycie
useEffect
iuseFunction
, na przykład:Zamiast console.log możesz użyć
useState
do wyzwolenia czegoś.źródło
React używa SyntheticKeyboardEvent do zawijania natywnego zdarzenia przeglądarki, a to zdarzenie Synthetic dostarcza nazwany atrybut klucza ,
którego możesz użyć w następujący sposób:
źródło
e.key
dlaEscape
wraca jakoEsc
#triggeredDo haczyka wielokrotnego użytku React
Stosowanie:
źródło