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.
Olay dinleyicisini "document" veya "window" öğesine bağlamanın belirli bir sorunu var mı? –
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
Olaylar, olay dinleyicisini eklediğiniz yere bakılmaksızın DOM'ı sonuna kadar tetikler. Onları durdurmanın tek yolu "stopPropagation" ve "preventDefault" ile. –