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
Firefox, Opera und andere Browser unterstützen Web...
Inhaltsverzeichnis JavaScript-Objekte 1. Definiti...
Dieser Artikel stellt hauptsächlich den Prozess d...
Inhaltsverzeichnis Was ist das Beobachtermuster? ...
Während der Entwicklung wurden die folgenden Situ...
Eines der wichtigsten Merkmale eines Stylesheets ...
Installieren Sie das SSH-Tool 1. Öffnen Sie das T...
Dieses Mal schauen wir uns ein Navigationsleisten...
1. HTML-Code Code kopieren Der Code lautet wie fo...
Was ist CSS? CSS (Abkürzung für Cascading Style S...
Detaillierte Erklärung des Docker-Tags Die Verwen...
MySQL ist einfach zu installieren, schnell und ve...
Inhaltsverzeichnis 1. Map akzeptiert jeden Schlüs...
In diesem Artikelbeispiel wird der spezifische Co...
Eine einfache Aufzeichnung der Datenbank-Startpro...