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
In diesem Artikel erfahren Sie, wie Sie Nginx so ...
Ich habe diese Frage heute in der SQL-Schulungsfr...
Ich glaube, dass vielen Leuten, die MySQL schon l...
Heute habe ich eine Aktivität für einen roten Ums...
watch : auf Datenänderungen achten (Änderungserei...
Der HTML-Code zum Abfangen von mehrzeiligem Text l...
Es gibt drei Typen von regulären Matching-Selekto...
Mit dem obigen Artikel habe ich meine Einführung i...
Vor dem Verpacken im Webpack müssen wir sicherste...
Inhaltsverzeichnis 1. for-Schleife 2. Doppelte fo...
Inhaltsverzeichnis Das Prinzip der asynchronen DO...
Problem <br />Bei responsivem Layout sollte...
Durchführung regelmäßiger Backups von Mysql-Daten...
Einführung in Vue Die aktuelle Ära der großen Fro...
Docker-Compose stellt Gitlab bereit 1. Docker ins...