Als ich heute an einem React-Projekt arbeitete, habe ich ein onKeyDown-Eingabeereignis gedrosselt, aber der Drosselungseffekt schlug fehl. Problemcode: rendern() { zurückkehren ( <div className="Suchleiste"> <input className="search-input" type="text" placeholder="Bitte geben Sie den zu suchenden Benutzernamen ein (Englisch)" onKeyDown={this.throttle(this.handleKeyDown)}/> </div> ) } Gashebel = (fn) => { let gültig = wahr const Kontext = dies return Funktion() { wenn (!gültig) zurückgeben gültig = falsch const args = Argumente fn.apply(Kontext, Argumente) setzeTimeout(() => { gültig = wahr }, 1000); } } handleKeyDown = (e) => { let { Wert } = e.Ziel const keyCode = e.keyCode wenn (Schlüsselcode !== 13) return wenn (!Wert.trim()) return // Suche senden this.props.search(value) } Das Problem hierbei ist: this.props.search(value) in der handleKeyDown()-Methode Auf diese Weise wird die Methode throttle() erneut ausgeführt. Gashebel = (fn) => { console.log('%c Drosselklappeninitialisierung', 'Farbe: rot'); let gültig = wahr const Kontext = dies return Funktion() { wenn (!gültig) zurückgeben gültig = falsch const args = Argumente fn.apply(Kontext, Argumente) setzeTimeout(() => { gültig = wahr }, 1000); } } Wenn Sie dem Code das Drucken hinzufügen, sehen Sie, dass die Drosselklappeninitialisierung mehrere Zeilen in der Konsole druckt. Lösung 1:Setzen Sie die Drosselungsinitialisierungsposition in die Ereignisfunktionszuweisung ein rendern() { zurückkehren ( <div className="Suchleiste"> <input className="search-input" type="text" placeholder="Bitte geben Sie den zu suchenden Benutzernamen ein (Englisch)" onKeyDown={this.handleKeyDown}/> </div> ) } handleKeyDown = diese.throttle((e) => { let { Wert } = e.Ziel const keyCode = e.keyCode wenn (Schlüsselcode !== 13) return wenn (!Wert.trim()) return // Suche senden this.props.search(value) }) Lösung 2: Initialisierung im Konstruktor zuweisenrendern() { zurückkehren ( <div className="Suchleiste"> <input className="search-input" type="text" placeholder="Bitte geben Sie den zu suchenden Benutzernamen ein (Englisch)" onKeyDown={this.handleKeyDown}/> </div> ) } Konstruktor(Requisiten) { super(Requisiten) dies.handleKeyDown = dies.throttle(dies.handleSearch) } handleSearch = (e) => { let { Wert } = e.Ziel const keyCode = e.keyCode wenn (Schlüsselcode !== 13) return wenn (!Wert.trim()) return // Suche senden this.props.search(value) } Übersicht über die Bergbaugruben:Um den Auslösemechanismus des Reaktionslebenszyklus besser zu verstehen Oben finden Sie ausführliche Informationen zu den Gründen und Lösungen für das Versagen des Drosselungseffekts von React-Ereignissen. Weitere Informationen zum Versagen des Drosselungseffekts von React-Ereignissen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Erläuterung der Linux-Kernel-Optimierungskonfiguration für hochparallele Nginx-Server
Überblick Heute werden wir hauptsächlich erläuter...
1. Das ul-Tag hat in Mozilla standardmäßig einen F...
Inhaltsverzeichnis 1- Fehlerdetails 2-Einzellösun...
Freunde, die über Grundkenntnisse in SQL verfügen...
Vorwort Glauben Sie mir, solange Sie sich an die ...
1. So erstellen Sie einen Benutzer und ein Passwo...
Vorwort Meta ist ein Hilfstag im Kopfbereich der ...
Heutzutage ist plattformübergreifende Entwicklung...
Inhaltsverzeichnis 1. Analyse des wichtigsten Que...
In diesem Artikel wird die Zusammensetzung der Ha...
Lassen Sie mich zunächst die MySQL-Version erklär...
In diesem Artikelbeispiel wird der spezifische Co...
Zunächst müssen wir verstehen, dass ein TCP-Socke...
1. Öffnen Sie Port 2375 Bearbeiten Sie docker.ser...
1. Melden Sie sich mit dem IE-Browser beim VPN an...