ZustandshakenBeispiele: importiere { useState } von „react“; Funktion Beispiel() { const [Anzahl, Anzahl festlegen] = useState(0); //count: deklarierte Variable; setCount: Funktion zum Ändern des Zählwerts; 0: Anfangswert des Zählwerts return ( <div> <p>Sie haben {count} Mal geklickt</p> <button bei Klick={() => setzeAnzahl(Anzahl + 1)}> Klick mich </button> </div> ); } useState ist eine Hook-Funktion, die mit React geliefert wird und deren Funktion darin besteht, Statusvariablen zu deklarieren. Der von der Funktion useState empfangene Parameter ist unser Anfangszustand. Sie gibt ein Array zurück. Das [0]te Element in diesem Array ist der aktuelle Zustandswert und das [1]te Element ist die Methodenfunktion, die den Zustandswert ändern kann. Wenn der Benutzer auf die Schaltfläche klickt, rufen wir die Funktion setCount auf, die den neuen Statuswert als Parameter erhält. Als nächstes lassen wir es reagieren, wodurch unsere Beispielkomponente erneut gerendert wird. Was passiert, wenn eine Komponente mehrere Statuswerte hat? Funktion BeispielMitVielenZuständen() { const [Alter, Alter festlegen] = useState(42); const [Obst, setFruit] = useState('Banane'); const [todos, setTodos] = useState([{ text: 'Hooks lernen' }]); } Zweitens muss der von useState empfangene Anfangswert kein einfacher Datentyp wie Zeichenfolge/Zahl/Boolescher Wert sein. Er kann Objekte oder Arrays als Parameter empfangen. Zu beachten ist lediglich, dass unser vorheriges this.setState die Zustände zusammenführte und einen neuen Zustand zurückgab, während Einerseits wird der Hook direkt in der Funktion statt in der Klasse verwendet, andererseits ist jeder Hook unabhängig voneinander, und verschiedene Komponenten, die denselben Hook aufrufen, können die Unabhängigkeit ihrer jeweiligen Zustände sicherstellen. Wie stellt React die Unabhängigkeit mehrerer UseStates sicher? Die Antwort ist, //Erstes Rendering useState(42); //Alter auf 42 initialisieren useState('Banane'); //Frucht zu Banane initialisieren useState([{ text: 'Learn Hooks' }]); //... // Zweites Rendering useState (42); // Lies den Wert der Statusvariablen age (der zu diesem Zeitpunkt übergebene Parameter 42 wird direkt ignoriert) useState('banana'); // Lies den Wert der Zustandsvariablen fruit (der Parameter banana wird zu diesem Zeitpunkt ignoriert) useState([{ text: 'Learn Hooks' }]); //... React schreibt vor, dass wir Hooks in der äußersten Ebene der Funktion schreiben müssen und sie nicht in bedingte Anweisungen wie ifelse schreiben können, um sicherzustellen, dass die Ausführungsreihenfolge der Hooks konsistent ist. Effekt-Hooks Beispiele: importiere { useState, useEffect } von „react“; Funktion Beispiel() { const [Anzahl, Anzahl festlegen] = useState(0); // Ähnlich wie componentDidMount und componentDidUpdate: useEffect(() => { // Aktualisieren Sie den Dokumenttitel. document.title = `Sie haben ${count} Mal geklickt`; }); zurückkehren ( <div> <p>Sie haben {count} Mal geklickt</p> <button bei Klick={() => setzeAnzahl(Anzahl + 1)}> Klick mich </button> </div> ); } Wie würden wir es ohne Hooks schreiben? Klasse Beispiel erweitert React.Component { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = { Anzahl: 0 }; } componentDidMount() { document.title = `Sie haben ${this.state.count} Mal geklickt`; } KomponenteDidUpdate() { document.title = `Sie haben ${this.state.count} Mal geklickt`; } rendern() { zurückkehren ( <div> <p>Sie haben {this.state.count} Mal geklickt</p> <button onClick={() => this.setState({ count: this.state.count + 1 })}> Klick mich </button> </div> ); } } Die von uns geschriebenen Statuskomponenten haben normalerweise viele Nebenwirkungen, z. B. das Initiieren von Ajax-Anfragen zum Abrufen von Daten, das Hinzufügen einiger Listener-Registrierungen und -Abmeldungen, das manuelle Ändern des DOM usw. Wir haben diese Nebeneffektfunktionen zuvor in Lebenszyklus-Funktions-Hooks geschrieben, wie etwa componentDidMount, componentDidUpdate und componentWillUnmount. Wie kann man einige Nebenwirkungen von useEffect aufheben ?
importiere { useState, useEffect } von „react“; Funktion FriendStatus(Eigenschaften) { const [isOnline, setIsOnline] = useState(null); Funktion handleStatusChange(status) { setIsOnline(status.isOnline); } useEffect(() => { ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange); // Achten Sie unbedingt auf diese Reihenfolge: Weisen Sie React an, die Bereinigung nach dem nächsten erneuten Rendern der Komponente und vor dem nächsten Aufruf von ChatAPI.subscribeToFriendStatus durchzuführen. Rückgabefunktion cleanup() { ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange); }; }); wenn (isOnline === null) { gibt „Wird geladen …“ zurück; } gibt „isOnline“ zurück? „Online“: „Offline“; } Wie kann man einige unnötige Nebeneffektfunktionen überspringen? Gemäß der Idee im vorherigen Abschnitt müssen diese Nebeneffektfunktionen bei jedem erneuten Rendering ausgeführt werden, was offensichtlich nicht wirtschaftlich ist. Wie kann man einige unnötige Berechnungen überspringen? Wir müssen nur den zweiten Parameter an useEffect übergeben. Verwenden Sie den zweiten Parameter, um React anzuweisen, die von uns übergebene Nebeneffektfunktion (der erste Parameter) nur auszuführen, wenn sich der Wert dieses Parameters ändert. useEffect(() => { document.title = `Sie haben ${count} Mal geklickt`; }, [Anzahl]); // Nur wenn sich der Wert von count ändert, wird der Satz `document.title` erneut ausgeführt Wenn wir als zweiten Parameter ein leeres Array [] übergeben, ist dies tatsächlich gleichbedeutend damit, es nur während des ersten Renderings auszuführen. Dies ist das Muster von componentDidMount plus componentWillUnmount. Diese Verwendung kann jedoch zu Fehlern führen. Verwenden Sie sie daher seltener. Welche anderen integrierten Effekt-Hooks gibt es? Kontext verwenden Wie schreibe ich benutzerdefinierte Effekt-Hooks? Warum sollten wir selbst einen Effekt-Hook schreiben? Auf diese Weise können wir Beispielsweise können wir die Funktion zum Beurteilen, ob ein Freund online ist, aus der oben beschriebenen FriendStatus-Komponente extrahieren und einen neuen useFriendStatus-Hook speziell zum Beurteilen erstellen, ob eine bestimmte ID online ist. importiere { useState, useEffect } von „react“; Funktion useFriendStatus(Freund-ID) { const [isOnline, setIsOnline] = useState(null); Funktion handleStatusChange(status) { setIsOnline(status.isOnline); } useEffect(() => { ChatAPI.subscribeToFriendStatus(Freund-ID, handleStatusChange); zurückgeben () => { ChatAPI.unsubscribeFromFriendStatus(Freund-ID, handleStatusChange); }; }); Rückgabe ist Online; } Derzeit kann die Komponente „FriendStatus“ wie folgt gekürzt werden: Funktion FriendStatus(Eigenschaften) { const isOnline = useFriendStatus(props.friend.id); wenn (isOnline === null) { gibt „Wird geladen …“ zurück; } gibt „isOnline“ zurück? „Online“: „Offline“; } Angenommen, wir haben eine weitere Freundesliste, die auch Online-Informationen anzeigen muss: Funktion FriendListItem(Eigenschaften) { const isOnline = useFriendStatus(props.friend.id); zurückkehren ( <li Stil = {{ Farbe: istOnline ? 'grün' : 'schwarz' }}> {props.friend.name} </li> ); } Dies ermöglicht Taro-HakenEs ist sehr einfach, die Hooks-API in Taro zu verwenden. Taros proprietäre Hooks (wie usePageScroll, useReachBottom) werden von @tarojs/taro eingeführt, und die eigenen Hooks des Frameworks (wie useEffect, useState) werden vom entsprechenden Framework eingeführt. importiere { usePageScroll, useReachBottom } von '@tarojs/taro' // Taro-spezifische Hooks importiere { useState, useEffect } von 'react' // Framework-Hooks (einfache Hooks) Damit ist dieser Artikel mit dem ausführlichen Tutorial zum Einstieg in React Hooks abgeschlossen. Weitere relevante Einführungsinhalte zu React Hooks finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: MySql-Abfrageanweisung mit mehreren Bedingungen und dem Schlüsselwort „OR“
>>: Detaillierte Interpretation der Datei /etc/fstab im Linux-System
brauchen Das Konfigurieren von DingTalk-Alarmen i...
Wenn Sie Erfahrung in der Vue2-Projektentwicklung...
1. Stellen Sie den Nginx-Dienst im Container bere...
Inhaltsverzeichnis 1. Numerischer Typ 1.1 Klassif...
Inhaltsverzeichnis 1. Rendern 2. Umsetzungsprinzi...
Wenn Sie ein Arbeitgeber fragt, ob in einer MySQL...
Voraussetzung: Das Webentwickler-Plugin wurde inst...
1. Caches - Abfrage-Cache Die folgende Abbildung ...
html: Tatsächlich werden mehrere durchgezogene Kr...
Protokollieren Sie die Installation und Verwendun...
Vorwort Die neueste Version von MySQL 8.0 ist 8.0...
1. Schreiben Sie zuerst eine Mysql-Link-Einstellu...
Vue kapselt die Breadcrumb-Komponente zu Ihrer In...
Schauen wir uns zuerst den Fall an. Verwenden Sie...
In diesem Artikel finden Sie den spezifischen Cod...