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
CentOS 8 ist jetzt verfügbar! Die Versionen von C...
Von NFS bereitgestellte Dienste Mounten: Aktivier...
Inhaltsverzeichnis 1. Inhaltsverzeichnis 1.1 Konz...
1. Quellenliste sichern Die Standardquelle von Ub...
Vorwort Wir alle wissen, dass man QR-Codes in off...
Binäre MySQL-Installationsmethode Laden Sie mysql...
Wie lädt man das JAR-Paket in ein privates Lager ...
In diesem Projekt wird der Docker-Container zum E...
Virtuelle Maschinen sind eine sehr praktische Tes...
Nehmen wir Windows als Beispiel. Bei Linux ist es...
CentOS6.9 installiert Mysql5.7 zu Ihrer Informati...
Amtliche Dokumentation: https://dev.mysql.com/doc...
Vorwort: Eines Tages baute ich einen MySQL-Dienst...
Inhaltsverzeichnis Klicken Sie zunächst auf das E...
Es gibt erhebliche Unterschiede zwischen CentOS7 ...