Bagaimana cara mendeteksi penekanan tombol Esc di reactjs? Hal yang mirip dengan jquery
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key maps to keycode `27`
// <DO YOUR WORK HERE>
}
});
Setelah terdeteksi saya ingin meneruskan info ke komponen. Saya memiliki 3 komponen yang komponen aktif terakhirnya perlu bereaksi terhadap tombol escape.
Saya sedang memikirkan semacam mendaftar ketika sebuah komponen menjadi aktif
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>
)
}
}
dan di semua komponen
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)}/>
)
}
}
Saya percaya ini akan berhasil tetapi saya pikir ini akan lebih seperti panggilan balik. Apakah ada cara yang lebih baik untuk menangani ini?
javascript
reactjs
Neo
sumber
sumber
Jawaban:
Jika Anda mencari penanganan peristiwa kunci tingkat dokumen, maka mengikatnya selama
componentDidMount
adalah cara terbaik (seperti yang ditunjukkan oleh contoh codepen Brad Colthurst ):Perhatikan bahwa Anda harus memastikan untuk menghapus key event listener saat unmount untuk mencegah potensi kesalahan dan kebocoran memori.
EDIT: Jika Anda menggunakan kait, Anda dapat menggunakan
useEffect
struktur ini untuk menghasilkan efek yang serupa:sumber
addEventListener
danremoveEventListener
?focus
. Ini tidak relevan untukkeydown
, tetapi dulunya tidak opsional sehingga biasanya ditentukan untuk kompatibilitas dengan IE <9.this.escFunction
ke dalam fungsi sepertifunction() { this.escFunction(event) }
, jika tidak itu dijalankan pada pemuatan halaman tanpa "keydown".Anda akan ingin mendengarkan escape
keyCode
(27) dari ReactSyntheticKeyBoardEvent
onKeyDown
:CodePen Brad Colthurst yang diposting di komentar pertanyaan berguna untuk menemukan kode kunci untuk kunci lain.
sumber
onKeyPress
event ketika tombol yang ditekan adalah ESC dan fokus ada di dalam<input type="text" />
. Dalam skenario itu, Anda dapat menggunakanonKeyDown
danonKeyUp
, keduanya menembak, dan dalam urutan yang benar.Cara lain untuk melakukannya dalam komponen fungsional, adalah dengan menggunakan
useEffect
danuseFunction
, seperti ini:Alih-alih console.log, Anda dapat menggunakan
useState
untuk memicu sesuatu.sumber
React menggunakan SyntheticKeyboardEvent untuk membungkus event browser asli dan event Synthetic ini menyediakan atribut key bernama ,
yang bisa Anda gunakan seperti ini:
sumber
e.key
untukEscape
kembali lagi sebagaiEsc
#triggeredUntuk solusi hook React yang dapat digunakan kembali
Pemakaian:
sumber