2016-03-31 13 views
0

React uygulamasında tuş ayıklamalarını bulmaya çalışıyorum ve biraz sıkışmış durumdayım.Tepkime anahtar sözcükleri

Bir onKeyPress yerleştirdim ve girişimde bir onKeyDown çalıştı. Bu, tüm harfleri ve Enter tuşunu kullanmamı sağladı.

ben ok tuşlarını ve sadece document.addEventListener yaratmadan Esc tuşuna (' 'keydown', this.onKeypress) işlemek için iyi bir yol bulmak mümkün olmamıştır Ancak

Herkes iyi olsun çözüm?

+0

Olay dinleyicisini "document" veya "window" öğesine bağlamanın belirli bir sorunu var mı? –

+0

Olaylarımı sürekli ateş etmemeyi tercih ediyorum. Eğer sadece girdiye bağlıysa o zaman sadece odaklandığım zaman patlar. Tüm sayfalarda görülebilen bir arama çubuğudur, bu da her sayfada olayların çok fazla olacağı anlamına gelir. – kjonsson

+0

Olaylar, olay dinleyicisini eklediğiniz yere bakılmaksızın DOM'ı sonuna kadar tetikler. Onları durdurmanın tek yolu "stopPropagation" ve "preventDefault" ile. –

cevap

1

Olay işleyicinizin yaşam döngüsünü kontrol etmek için focus ve blur olaylarını kullanabilirsiniz.

render() { 
    return (
    <input ref={inputLoaded} type="text" /> 
); 
}, 
inputLoaded(input) { 
    input.addEventListener('focus', this.addEventListeners); 
    input.addEventListener('blur', this.removeEventListeners); 
    this.input = input; 
}, 
componentWillUnmount() { 
    this.input.removeEventListener('focus', this.addEventListeners); 
    this.input.removeEventListener('blur', this.removeEventListeners); 
    window.removeEventListener('keydown', this.handleKey); 
}, 
addEventListeners() { 
    window.addEventListener('keydown', this.handleKey); 
}, 
removeEventListeners() { 
    window.removeEventListeners('keydown', this.handleKey); 
}, 
handleKey(event) { 
    // this only gets called if input is focused. 
    // do something with this key 
} 

dilerseniz, daha sonra, bir state değişkeni kontrol girişi bazı işler yapmadan önce, handleKey yöntemi içinde odak olup olmadığını kontrol etmek focus ve blur olayları kullanabilirsiniz.

+0

Güzel imo. Teşekkürler – kjonsson

+0

@doublecheeseburger Bu cevap size yardımcı olduysa, kabul edilen cevap olarak işaretlemeyi düşünebilir miydiniz? –

İlgili konular