Como detecto pressionar a tecla Esc nos reactjs? A mesma coisa que jquery
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key maps to keycode `27`
// <DO YOUR WORK HERE>
}
});
Uma vez detectado, quero passar as informações aos componentes. Eu tenho três componentes, dos quais o último componente ativo precisa reagir ao pressionamento da tecla Escape.
Eu estava pensando em um tipo de registro quando um componente se torna ativo
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>
)
}
}
e em todos os 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)}/>
)
}
}
Acredito que isso funcionará, mas acho que será mais como um retorno de chamada. Existe alguma maneira melhor de lidar com isso?
javascript
reactjs
Neo
fonte
fonte
Respostas:
Se você estiver procurando por uma manipulação de eventos de chave no nível do documento , vinculá- la durante
componentDidMount
é a melhor maneira (como mostra o exemplo de codepen de Brad Colthurst ):Observe que você deve remover o ouvinte de eventos principal ao desmontar para evitar possíveis erros e vazamentos de memória.
Edição: Se você estiver usando ganchos, você pode usar esta
useEffect
estrutura para produzir um efeito semelhante:fonte
addEventListener
eremoveEventListener
?focus
. Não é relevante parakeydown
, mas costumava não ser opcional, por isso é geralmente especificado para compatibilidade com o IE <9.this.escFunction
em uma função comofunction() { this.escFunction(event) }
, caso contrário, ele estava sendo executado no carregamento da página sem nenhum "pressionamento de tecla".Você vai querer ouvir escape
keyCode
(27) do ReactSyntheticKeyBoardEvent
onKeyDown
:O CodePen de Brad Colthurst publicado nos comentários da pergunta é útil para encontrar códigos de chave para outras chaves.
fonte
onKeyPress
evento quando a tecla pressionada é ESC e o foco está dentro<input type="text" />
. Nesse cenário, você pode usaronKeyDown
eonKeyUp
, os quais disparam, e na ordem correta.Outra maneira de conseguir isso em um componente funcional é usar
useEffect
euseFunction
, assim:Em vez de console.log, você pode usar
useState
para disparar algo.fonte
React usa SyntheticKeyboardEvent para quebrar o evento nativo do navegador e esse evento Synthetic fornece o atributo key nomeado ,
que você pode usar assim:
fonte
e.key
porEscape
volta comoEsc
#triggeredPara uma solução reutilizável de gancho React
Uso:
fonte