Gründe und Lösungen für das Versagen des React-Ereignisdrosselungseffekts

Gründe und Lösungen für das Versagen des React-Ereignisdrosselungseffekts

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
Die Komponenteneigenschaften werden aktualisiert, wodurch der Lebenszyklus des React-Update-Flows ausgelöst wird. Render() erneut ausgeführt;

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 zuweisen

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>
    )
  }
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:
  • So führen Sie SCSS in ein React-Projekt ein
  • So führen Sie Angular-Komponenten in React ein
  • React führt Containerkomponenten und Anzeigekomponenten in Vue ein
  • React-Internationalisierung – Verwendung von react-intl
  • Erläuterung synthetischer React-Ereignisse
  • Ein kurzer Vergleich von Props in React
  • Detaillierte Erklärung der Lösung zur Migration von Antd+React-Projekten nach Vite
  • React-Implementierungsbeispiel mit Amap (react-amap)
  • Eine kurze Einführung in React

<<:  Beispiele für Optimierungstechniken zur Verbesserung der Effizienz langsamer Abfragen in MySQL IN-Anweisungen

>>:  Erläuterung der Linux-Kernel-Optimierungskonfiguration für hochparallele Nginx-Server

Artikel empfehlen

CentOS 8 ist jetzt verfügbar

CentOS 8 ist jetzt verfügbar! Die Versionen von C...

Lösung für die geringe Schreibeffizienz von unter AIX gemountetem NFS

Von NFS bereitgestellte Dienste Mounten: Aktivier...

MySQL-Datenbankindizes und -Transaktionen

Inhaltsverzeichnis 1. Inhaltsverzeichnis 1.1 Konz...

So laden Sie das JAR-Paket über die Webseite auf Nexus hoch

Wie lädt man das JAR-Paket in ein privates Lager ...

Detailliertes Tutorial zum Herunterladen und Installieren von VMware Workstation

Virtuelle Maschinen sind eine sehr praktische Tes...

So verwenden Sie Nginx zum Erstellen eines statischen Ressourcenservers

Nehmen wir Windows als Beispiel. Bei Linux ist es...

MySQL 5.7.17 Installations- und Konfigurations-Tutorial unter CentOS6.9

CentOS6.9 installiert Mysql5.7 zu Ihrer Informati...

Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen

Amtliche Dokumentation: https://dev.mysql.com/doc...

Docker löst das Problem, dass das Terminal kein Chinesisch eingeben kann

Vorwort: Eines Tages baute ich einen MySQL-Dienst...

Erläuterung synthetischer React-Ereignisse

Inhaltsverzeichnis Klicken Sie zunächst auf das E...