Detaillierte Erklärung der Hook-Funktion und -Nutzung im Lebenszyklus der neuen Version von React

Detaillierte Erklärung der Hook-Funktion und -Nutzung im Lebenszyklus der neuen Version von React

Im Vergleich zum alten Lebenszyklus

Bildbeschreibung hier einfügen

Drei Hooks werden aufgegeben und zwei neue Hooks hinzugefügt

Nach React16 werden drei Lebenszyklen verworfen (aber nicht gelöscht)

  • componentWillMount (der Hook, an dem die Komponente gemountet wird)
  • componentWillReceiveProps (ein Hook, wenn eine Komponente im Begriff ist, einen neuen Parameter zu empfangen)
  • componentWillUpdate (der Hook, wenn die Komponente aktualisiert werden soll)

Neue Hooks zum Lebenszyklus der neuen Version hinzugefügt

  • getDerivedStateFromProps
  • Neue Eigenschaften und Zustände können durch Parameter erreicht werden
  • Diese Funktion ist statisch
  • Der Rückgabewert dieser Funktion überschreibt den Komponentenstatus

getSnapshotBeforeUpdate

  1. Der eigentliche DOM-Aufbau ist abgeschlossen, wurde aber noch nicht auf der Seite gerendert.
  2. In dieser Funktion wird es normalerweise verwendet, um einige zusätzliche DOM-Operationen zu implementieren
  3. Der Rückgabewert dieser Funktion wird als dritter Parameter von componentDidUpdate verwendet.

getDerivedStateFromProps

getDerivedStateFromProps ist nicht für Instanzen, es muss als statische Methode definiert werden. Und muss einen Rückgabewert angeben


Der Rückgabewert kann Statusobjekt oder null sein.
Wenn der Rückgabewert Status Obj ist, wird der vorherige überschrieben und kann nicht geändert werden. Die Rückgabe von null hat keine Auswirkung auf andere Funktionen.

//Einen abgeleiteten Status von den Props abrufen static getDerivedStateFromProps(props,state){
	Rücklaufstützen
}

Wenn der Wert des Status immer von Eigenschaften abhängt, können Sie getDerivedStateFromProps verwenden.

Bildbeschreibung hier einfügen

<div id="test"></div>
  <!-- React-Core-Bibliothek importieren -->
  <script src="../js/17.0.1/react.development.js"></script>
  <!-- Einführung von react-dom zur Unterstützung von react beim Betrieb von dom -->
  <script src="../js/17.0.1/react-dom.development.js"></script>
  <!-- Führen Sie Babel ein, um jsx in js zu konvertieren -->
  <script src="../js/17.0.1/babel.min.js"></script>

  <Skripttyp = "Text/Babel">
    //Komponentenklasse erstellen Count erweitert React.Component{
    // Konstruktor Konstruktor(Requisiten){
      console.log('Anzahl ---Konstruktor')
      super(Requisiten)
      // Status initialisieren this.state = {count:0}
    }

    //Komponente einhakenDidMount(){
      console.log('Anzahl --- componentDidMount')
    }

    // Rückruf der Schaltfläche „Komponente deinstallieren“ death=()=>{
      ReactDOM.unmountComponentAtNode(document.getElementById('test'))
    }

    // Implementiere +1
     hinzufügen =()=>{
      // Den ursprünglichen Zustand abrufen const {count} = this.state
      // Status aktualisieren this.setState({count:count+1})
    }

    // Rückruf für die Schaltfläche zum erzwungenen Aktualisieren force=()=>{
      dies.forceUpdate()
    }

    statisch getDerivedStateFromProps(Requisiten,Zustand){
      console.log('getDerivedStateFromProps', Eigenschaften, Status)
      Rücklaufstützen
    }

    // Steuerkomponenten-Updateventil shouldComponentUpdate(){
      console.log('Anzahl --- sollteKomponentenaktualisierung')
      // Wenn der Rückgabewert false ist, ist das Ventil standardmäßig geschlossen.
      returniere wahr
    }

    //Komponentenaktualisierung abgeschlossen hook componentDidUpdate(){
      console.log('Anzahl --- KomponenteDidUpdate')
    }

     // Die Komponente wird deinstalliert hook componentWillUnmount(){
      console.log('Anzahl --- Komponente wird ausgehängt');
    }

    machen(){
      console.log('Anzahl --- Rendern')
      const {Anzahl} = dieser.Zustand
      zurückkehren(
        <div>
          <h2>Aktuelle Summe: {count}</h2>
          <button onClick={this.add}>Klick mich an +1</button>  
          <button onClick={this.death}>Klicken Sie hier, um die Komponente zu deinstallieren</button>  
          <button onClick={this.force}>Klicken Sie hier, um die Aktualisierung zu erzwingen (ohne Daten zu ändern)</button>  
        </div>
      )
    }
  }
  
  // Rendering-Komponente ReactDOM.render(<Count count={166}/>,document.getElementById('test'))
  </Skript>

Ausführungsergebnisse

Bildbeschreibung hier einfügen

getSnapshotBeforeUpdate

Der Rückgabewert kann null oder ein Snapshot sein. Wenn er null ist, hat er keine Auswirkung. Wenn es sich um einen Snapshot handelt, kann der Rückgabewert an den dritten Parameter von componentDidUpdate übergeben werden.
Die drei Parameter, die componentDidUpdate empfangen kann, sind die vorherigen Props, der vorherige Status und der von getSnapshotBeforeUpdate zurückgegebene Snapshot.
vorherige Eigenschaften, vorheriger Status, SnapshotValue

Bildbeschreibung hier einfügen

<div id="test"></div>
  <!-- React-Core-Bibliothek importieren -->
  <script src="../js/17.0.1/react.development.js"></script>
  <!-- Einführung von react-dom zur Unterstützung von react beim Betrieb von dom -->
  <script src="../js/17.0.1/react-dom.development.js"></script>
  <!-- Führen Sie Babel ein, um jsx in js zu konvertieren -->
  <script src="../js/17.0.1/babel.min.js"></script>

  <Skripttyp = "Text/Babel">
    //Komponentenklasse erstellen Count erweitert React.Component{
    // Konstruktor Konstruktor(Requisiten){
      console.log('Anzahl ---Konstruktor')
      super(Requisiten)
      // Status initialisieren this.state = {count:0}
    }

    //Komponente einhakenDidMount(){
      console.log('Anzahl --- componentDidMount')
    }

    // Rückruf der Schaltfläche „Komponente deinstallieren“ death=()=>{
      ReactDOM.unmountComponentAtNode(document.getElementById('test'))
    }

    // Implementiere +1
     hinzufügen =()=>{
      // Den ursprünglichen Zustand abrufen const {count} = this.state
      // Status aktualisieren this.setState({count:count+1})
    }

    // Rückruf für die Schaltfläche zum erzwungenen Aktualisieren force=()=>{
      dies.forceUpdate()
    }

    statisch getDerivedStateFromProps(Requisiten,Zustand){
      console.log('getDerivedStateFromProps', Eigenschaften, Status)
      return null
    }

    getSnapshotBeforeUpdate(){
      console.log('getSnapshotBeforeUpdate');
      "eee" zurückgeben
    }

    // Steuerkomponenten-Updateventil shouldComponentUpdate(){
      console.log('Anzahl --- sollteKomponentenaktualisierung')
      // Wenn der Rückgabewert false ist, ist das Ventil standardmäßig geschlossen.
      returniere wahr
    }

    //Komponentenaktualisierung abgeschlossen hook componentDidUpdate(preProps,preState,snapshotValue){
      console.log('Anzahl---1Komponentenaktualisierung', preProps, preState, SnapshotValue);
    }

     // Die Komponente wird deinstalliert hook componentWillUnmount(){
      console.log('Anzahl --- Komponente wird ausgehängt');
    }

    machen(){
      console.log('Anzahl --- Rendern')
      const {Anzahl} = dieser.Zustand
      zurückkehren(
        <div>
          <h2>Aktuelle Summe: {count}</h2>
          <button onClick={this.add}>Klick mich an +1</button>  
          <button onClick={this.death}>Klicken Sie hier, um die Komponente zu deinstallieren</button>  
          <button onClick={this.force}>Klicken Sie hier, um die Aktualisierung zu erzwingen (ohne Daten zu ändern)</button>  
        </div>
      )
    }
  }
  
  // Rendering-Komponente ReactDOM.render(<Count count={166}/>,document.getElementById('test'))
  </Skript>

Zusammenfassen

Drei Phasen des Lebenszyklus (Neu)

1. Initialisierungsphase: ausgelöst durch ReactDOM.render() - erstes Rendering

Konstruktor ()getDerivedStateFromPropsrender ()componentDidMount ()

2. Aktualisierungsphase: ausgelöst durch this.setSate() innerhalb der Komponente oder erneutes Rendern der übergeordneten Komponente

getDerivedStateFromPropsshouldComponentUpdate()render()getSnapshotBeforUpdatecomponentDidUpdate()

3. Komponenten aushängen: ausgelöst durch ReactDOM.unmountComponentAtNode()

componentWillUnmount()

Wichtiger Haken

rendern: Rendering initialisieren oder Rendering-Aufruf aktualisieren componentDidMount: Überwachung starten, Ajax-Anfrage senden componentWillUnmount: einige Abschlussarbeiten ausführen, z. B.: Timer bereinigen

Der Haken, der aufgegeben wird

  1. KomponenteWillMount
  2. KomponenteWillReceiveProps
  3. Komponente wird aktualisiert

Bei der aktuellen Verwendung wird eine Warnung angezeigt. Die nächste Hauptversion erfordert die Verwendung des Präfixes UNSAFE_. Es kann sein, dass in Zukunft vollständig darauf verzichtet wird, und es wird nicht empfohlen.

Dies ist das Ende dieses Artikels über die neue Version der React-Lifecycle-Hook-Funktion. Weitere relevante Inhalte zur React-Lifecycle-Hook-Funktion finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion über die Lebenszyklusfunktionen von React Component
  • Implementierungsmethode für den React State-Zustand und Lebenszyklus
  • Beispiel für den Lebenszyklus einer React-Komponente
  • Beispielanalyse des React-Lebenszyklus
  • Prinzipien und Verwendungshinweise zum React-Lebenszyklus
  • Vergleich zwischen Vue-Lebenszyklus und React-Lebenszyklus [empfohlen]
  • Eine kurze Diskussion über den Lebenszyklus von Komponenten in React Native
  • Detaillierte Erklärung zum Lebenszyklus von React-Komponenten
  • Alltäglicher Lebenszyklus von JS-React-Komponenten
  • Interviewer stellen häufig Fragen zum Lebenszyklus von React

<<:  Tutorial zur Verarbeitung statischer Ressourcen in Tomcat

>>:  Verwenden von Keras zur Beurteilung von SQL-Injection-Angriffen (Beispielerklärung)

Artikel empfehlen

Konfigurationslösung für die MySQL Dual-Master-Architektur (Master-Master)

In Unternehmen hat die hohe Verfügbarkeit von Dat...

Lösung für das MySQL IFNULL-Beurteilungsproblem

Problem: Die von mybatis zurückgegebenen Daten vo...

So verarbeiten Sie sehr große Formularbeispiele mit Vue+ElementUI

Aufgrund von Geschäftsanpassungen im Unternehmen ...

Zusammenfassung der wichtigsten Wissenspunkte zur MySQL-Abfrageoptimierung

Vorwort Abfrageoptimierung ist nichts, was über N...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.5.27 winx64

1. Installationspaket MySQL-Dienst-Downloadadress...

CSS-Rand halb oder teilweise sichtbarer Implementierungscode

1. Verwenden Sie Pseudoklassen, um die Hälfte des...

Probleme und Lösungen bei der Installation von Mininet auf Ubuntu 16.04.4LTS

Mininet Mininet ist eine leichtgewichtige, softwa...

mysql5.7.21 UTF8-Kodierungsproblem und -Lösung in der Mac-Umgebung

1. Ziel: Ändern Sie den Wert des character_set_se...

Umfassender Vergleich und Bewertung des Vue-Code-Hervorhebungs-Plugins

Inhaltsverzeichnis Umfassender Vergleich Aus der ...