Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ event.currentTarget
ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ addEventListener
Ρ _.debounce()
.
ΠΡΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² ΡΡΡΠ»ΠΊΠ΅ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Underscore. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΠ°ΠΊΡΡ ββββΠΊΠ°ΠΊ jQuery, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ. event
ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π²Π²Π΅ΡΡ
ΠΏΠΎ DOM, ΠΏΡΠΈ ΡΡΠΎΠΌ currentTarget
ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΡΠΊΡΠΈΠΏΠΊΠ°
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ. ΡΠΊΡΠΈΠΏΠΊΠ°
var debounced = _.debounce(fn, 50);
document.querySelector('.debounced-input').addEventListener('keyup', function(event) {
debounced(event, event.currentTarget);
});
ΠΠ°, ΡΡΠΎ Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΌΠΈΠΊΡΠΎΡΡΡΡΠΊΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ DOM, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ gator
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ jQuery.
Π― Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ currentTarget
ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ this
; Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΡΠΊΡΡΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ Π²ΠΈΠΆΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
@jridgewell Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ Π² React onChange. ΠΊΠΎΠ³Π΄Π° Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ debounce, Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΌΠΎΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ onChange, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ _.debounce
, Ρ ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ event
β ΡΠΌ. Π½ΠΈΠΆΠ΅
// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
// undefined on event.target, get lodash event not <input/> event target
const note = event.target.value
this.sendNote({ note })
}
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΌΠΎΠ΅ Π²ΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ .
ΠΡΠΎ Π²ΠΎΠΏΡΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅. onChange Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, Π° ΠΠΠ’ΠΠ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ debounced:
onChange_persist = (e) =>
{
e.persist();
e.onChange_debounced(e);
}
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@jridgewell Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ Π² React onChange. ΠΊΠΎΠ³Π΄Π° Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ debounce, Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΌΠΎΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ onChange, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
_.debounce
, Ρ ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉevent
β ΡΠΌ. Π½ΠΈΠΆΠ΅