Ich kann event.currentTarget
nicht abrufen, wenn ich addEventListener
mit _.debounce()
verwende.
Wenn die Eigenschaft in der Ereignisobjektreferenz geändert wird, die außerhalb des Bereichs von Underscore liegt. Wenn Sie eine Bibliothek wie jQuery verwenden, kann dies hilfreich sein, da sie ein synthetisches Ereignisobjekt erstellen, auf das Sie problemlos verweisen können sollten.
Ich glaube nicht, dass du das umgehen wirst. event
wird wiederverwendet, während es das DOM nach oben verbreitet, wobei sich currentTarget
für jedes Element mit einem Listener ändert. Geige
Das Übergeben eines zweiten Parameters kann dies umgehen. Geige
var debounced = _.debounce(fn, 50);
document.querySelector('.debounced-input').addEventListener('keyup', function(event) {
debounced(event, event.currentTarget);
});
Ja, das liegt außerhalb des Bereichs des Unterstrichs. Betrachten Sie ein Mikro-Framework für DOM-Ereignisse wie gator
Ich kann immer noch das Element bekommen, das currentTarget
normalerweise mit this
hat; Ich habe dieses Problem nur geöffnet, um sicherzustellen, dass das, was ich sehe, tatsächlich das erwartete Verhalten ist.
@jridgewell eine Idee, wie man dies in einem React onChange umgehen kann. Wenn ich Debounce nicht verwende, kann ich auf das richtige Ereignis in meiner onChange-Funktion zugreifen, aber wenn ich _.debounce
verwende, verliere ich das richtige event
– siehe unten
// 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 })
}
Siehe meinen zweiten Vorschlag .
Dies ist eine Frage der Umsetzung. Sie müssen das Ereignis beibehalten. onChange sollte ein persist aufrufen und DANN das persistente Ereignis an den entprellten Handler übergeben:
onChange_persist = (e) =>
{
e.persist();
e.onChange_debounced(e);
}
Hilfreichster Kommentar
@jridgewell eine Idee, wie man dies in einem React onChange umgehen kann. Wenn ich Debounce nicht verwende, kann ich auf das richtige Ereignis in meiner onChange-Funktion zugreifen, aber wenn ich
_.debounce
verwende, verliere ich das richtigeevent
– siehe unten