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

So unterstützen Sie Webdings-Schriftarten in Firefox

Firefox, Opera und andere Browser unterstützen Web...

JavaScript-Objekte (Details)

Inhaltsverzeichnis JavaScript-Objekte 1. Definiti...

Diagramm des Prozesses zur Implementierung eines Richtungsproxys durch Nginx

Dieser Artikel stellt hauptsächlich den Prozess d...

Bringen Sie Ihnen bei, wie Sie den Beobachtermodus in Javascript implementieren

Inhaltsverzeichnis Was ist das Beobachtermuster? ...

CSS-Tutorial: CSS-Attribut-Medientyp

Eines der wichtigsten Merkmale eines Stylesheets ...

So installieren und konfigurieren Sie den SSH-Dienst in Ubuntu 18.04

Installieren Sie das SSH-Tool 1. Öffnen Sie das T...

CSS-Tipps zur Implementierung der Chrome-Tab-Leiste

Dieses Mal schauen wir uns ein Navigationsleisten...

HTML+CSS zum Erstellen eines einfachen Fortschrittsbalkens

1. HTML-Code Code kopieren Der Code lautet wie fo...

CSS3-Randeffekte

Was ist CSS? CSS (Abkürzung für Cascading Style S...

Detaillierte Erläuterung der Verwendung von Docker-Tag und Docker-Push

Detaillierte Erklärung des Docker-Tags Die Verwen...

Teilen Sie 8 MySQL-Fallstricke, die Sie erwähnen müssen

MySQL ist einfach zu installieren, schnell und ve...

Wann sollte man Map anstelle einfacher JS-Objekte verwenden?

Inhaltsverzeichnis 1. Map akzeptiert jeden Schlüs...

Vue Shuttle-Box ermöglicht Auf- und Abbewegung

In diesem Artikelbeispiel wird der spezifische Co...

MySQL-Initialisierungskennwortvorgang unter Mac

Eine einfache Aufzeichnung der Datenbank-Startpro...