React Hooks verstehen: Ein Leitfaden zur modernen React-Entwicklung
Dec 23, 2024 pm 08:13 PMWas sind Hooks in React?
Hooks sind Funktionen, die es Entwicklern erm?glichen, sich in React-Status- und Lebenszyklusfunktionen von Funktionskomponenten einzubinden. Sie wurden in React 16.8 eingeführt, um Entwicklern die Verwendung von Status-, Kontext- und anderen React-Funktionen in Funktionskomponenten zu erm?glichen, ohne diese in Klassenkomponenten konvertieren zu müssen. Vor Hooks waren Klassenkomponenten die einzige M?glichkeit, Status, Lebenszyklusmethoden und andere Funktionen in React zu verarbeiten.
Hooks bieten eine pr?gnantere, lesbarere und wiederverwendbarere M?glichkeit, den Status und die Lebenszykluslogik in Funktionskomponenten zu verwalten. Durch die Nutzung von Hooks k?nnen React-Entwickler Komponenten schreiben, die einfacher, modularer und leichter zu testen sind.
1. Wichtige Hakentypen
1.1. useState Hook
Der Hook useState ist der grundlegendste Hook und erm?glicht es Ihnen, Ihren Funktionskomponenten einen Status hinzuzufügen. Es gibt ein Array zurück, das den aktuellen Statuswert und eine Funktion zum Aktualisieren dieses Werts enth?lt.
Beispiel:
import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); const increment = () => setCount(count + 1); const decrement = () => setCount(count - 1); return ( <div> <p>Count: {count}</p> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); };
- useState verwendet den anf?nglichen Zustandswert als Argument (in diesem Fall 0) und gibt ein Array mit der Zustandsvariablen (count) und der Funktion zu deren Aktualisierung (setCount) zurück.
1.2. useEffect Hook
Mit dem Hook useEffect k?nnen Sie Nebenwirkungen in Ihren Funktionskomponenten ausführen. Zu diesen Nebenwirkungen k?nnen Vorg?nge wie das Abrufen von Daten, das Abonnieren von Ereignissen oder das manuelle ?ndern des DOM geh?ren. Es ersetzt die Lebenszyklusmethoden von Klassenkomponenten wie ComponentDidMount, ComponentDidUpdate und ComponentWillUnmount.
Beispiel:
import React, { useState, useEffect } from 'react'; const Timer = () => { const [seconds, setSeconds] = useState(0); useEffect(() => { const timer = setInterval(() => { setSeconds((prev) => prev + 1); }, 1000); // Cleanup function to clear the interval return () => clearInterval(timer); }, []); // Empty dependency array means this effect runs once, like componentDidMount return <p>Timer: {seconds} seconds</p>; };
- useEffect wird standardm??ig nach jedem Rendern ausgeführt. Sie k?nnen jedoch ein zweites Argument – ??ein Abh?ngigkeitsarray – übergeben, um zu steuern, wann der Effekt ausgeführt wird. Wenn das Abh?ngigkeitsarray leer ist, wird der Effekt nur einmal ausgeführt, wenn die Komponente bereitgestellt wird.
1.3. useContext Hook
Der Hook useContext erm?glicht Ihnen den Zugriff auf den Kontextwert für ein bestimmtes Context-Objekt. Dies ist nützlich, um Daten durch den Komponentenbaum zu leiten, ohne Requisiten auf jeder Ebene manuell übergeben zu müssen.
Beispiel:
import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); const increment = () => setCount(count + 1); const decrement = () => setCount(count - 1); return ( <div> <p>Count: {count}</p> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); };
- useContext wird verwendet, um auf den Wert von ThemeContext innerhalb der ThemedComponent zuzugreifen, ohne die Theme-Requisite manuell zu übergeben.
1.4. Verwenden Sie den Reduzierhaken
Der useReducer-Hook ist eine Alternative zu useState, wenn Sie eine komplexere Zustandslogik verwalten müssen, insbesondere wenn der n?chste Zustand vom vorherigen abh?ngt. Es funktioniert ?hnlich wie Reduzierer in Redux.
Beispiel:
import React, { useState, useEffect } from 'react'; const Timer = () => { const [seconds, setSeconds] = useState(0); useEffect(() => { const timer = setInterval(() => { setSeconds((prev) => prev + 1); }, 1000); // Cleanup function to clear the interval return () => clearInterval(timer); }, []); // Empty dependency array means this effect runs once, like componentDidMount return <p>Timer: {seconds} seconds</p>; };
- useReducer nimmt eine Reduzierfunktion und einen Anfangszustand als Argumente und gibt den aktuellen Zustand und eine Dispatch-Funktion zurück, um Aktionen an den Reduzierer zu senden.
1.5. Verwenden Sie den Callback-Hook
Der Hook useCallback gibt eine gespeicherte Version einer Funktion zurück, die sich nur ?ndert, wenn sich eine der Abh?ngigkeiten ge?ndert hat. Dies kann dazu beitragen, die Leistung zu optimieren, indem unn?tige Neuerstellungen von Funktionen verhindert werden, insbesondere wenn diese als Requisiten an untergeordnete Komponenten übergeben werden.
Beispiel:
import React, { useContext } from 'react'; const ThemeContext = React.createContext('light'); const ThemedComponent = () => { const theme = useContext(ThemeContext); return <div>The current theme is {theme}</div>; }; const App = () => { return ( <ThemeContext.Provider value="dark"> <ThemedComponent /> </ThemeContext.Provider> ); };
- useCallback verhindert, dass die handleClick-Funktion bei jedem Rendern neu erstellt wird, wodurch die Leistung optimiert wird, insbesondere bei gro?en Anwendungen.
1.6. Verwenden SieMemo Hook
Der useMemo-Hook ?hnelt useCallback, gibt jedoch einen gespeicherten Wert anstelle einer gespeicherten Funktion zurück. Es hilft, die Leistung zu optimieren, indem Werte nur bei Bedarf neu berechnet werden.
Beispiel:
import React, { useReducer } from 'react'; // Reducer function const counterReducer = (state, action) => { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } }; const Counter = () => { const [state, dispatch] = useReducer(counterReducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>Increment</button> <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button> </div> ); };
- useMemo hilft, teure Berechnungen zu vermeiden, indem es das Ergebnis der Berechnung speichert, bis sich die relevanten Abh?ngigkeiten (in diesem Fall die Anzahl) ?ndern.
2. Vorteile von Haken
1. Einfacherer und pr?gnanterer Code
Hooks erm?glichen Ihnen die Verwendung von Status- und anderen Features in Funktionskomponenten, ohne klassenbasierte Komponenten schreiben zu müssen, was zu weniger Boilerplate-Code und besser lesbaren Komponenten führt.
2. Bessere Wiederverwendbarkeit
Mit Hooks k?nnen Sie Komponentenlogik in benutzerdefinierte Hooks extrahieren, wodurch es einfacher wird, Logik über verschiedene Komponenten hinweg zu teilen, ohne Code zu duplizieren.
3. Kein ?dieses“ Schlüsselwort mehr
Da Hooks in Funktionskomponenten verwendet werden, besteht kein Grund zur Sorge über das Schlüsselwort this, das in Klassenkomponenten h?ufig zu Verwirrung führt.
4. Verbesserte Code-Organisation
Hooks erm?glichen es Ihnen, verwandte Logik zusammenzuhalten. Sie k?nnen beispielsweise ?useEffect“ für Nebenwirkungen und ?useState“ für die Zustandsverwaltung verwenden, alles innerhalb derselben Komponente, was die überlegung erleichtert.
3. Fazit
Hooks sind eine leistungsstarke Funktion von React, die es Entwicklern erm?glicht, Status, Lebenszyklusmethoden und andere React-Funktionen in Funktionskomponenten zu verwenden. Durch die Verwendung von Hooks wie useState, useEffect, useContext und useReducer k?nnen React-Entwickler saubereren, besser wartbaren und modularen Code schreiben. Hooks machen funktionale Komponenten leistungsf?higer und erm?glichen die Verwendung moderner Funktionen wie Zustand und Nebenwirkungen ohne die Komplexit?t von Klassenkomponenten.
Das obige ist der detaillierte Inhalt vonReact Hooks verstehen: Ein Leitfaden zur modernen React-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Es gibt drei g?ngige M?glichkeiten, HTTP-Anforderungen in Node.js zu initiieren: Verwenden Sie integrierte Module, Axios und Knotenfetch. 1. Verwenden Sie das integrierte HTTP/HTTPS-Modul ohne Abh?ngigkeiten, das für grundlegende Szenarien geeignet ist, jedoch eine manuelle Verarbeitung von Datengen?hten und Fehlerüberwachung erfordert, z. 2.Axios ist eine auf Versprechen basierende Bibliothek von Drittanbietern. Es verfügt über eine kurze Syntax und leistungsstarke Funktionen, unterstützt Async/Auseait, automatische JSON -Konvertierung, Interceptor usw. Es wird empfohlen, asynchrone Anforderungsvorg?nge zu vereinfachen. 3.Node-Fetch bietet einen Stil ?hnlich dem Browser-Abruf, basierend auf Versprechen und einfacher Syntax

JavaScript -Datentypen sind in primitive Typen und Referenztypen unterteilt. Zu den primitiven Typen geh?ren String, Anzahl, Boolesche, Null, undefiniertes und Symbol. Die Werte sind unver?nderlich und Kopien werden bei der Zuweisung von Werten kopiert, sodass sie sich nicht gegenseitig beeinflussen. Referenztypen wie Objekte, Arrays und Funktionen speichern Speicheradressen, und Variablen, die auf dasselbe Objekt zeigen, wirkt sich gegenseitig aus. Typeof und Instanz k?nnen verwendet werden, um die Typen zu bestimmen, aber auf die historischen Probleme der TypeOfnull zu achten. Das Verst?ndnis dieser beiden Arten von Unterschieden kann dazu beitragen, einen stabileren und zuverl?ssigeren Code zu schreiben.

Hallo, JavaScript -Entwickler! Willkommen in den JavaScript -Nachrichten dieser Woche! Diese Woche konzentrieren wir uns auf: Oracas Markenstreit mit Deno, neue JavaScript -Zeitobjekte werden von Browsern, Google Chrome -Updates und einigen leistungsstarken Entwickler -Tools unterstützt. Fangen wir an! Der Markenstreit von Oracle mit dem Versuch von Deno Oracle, ein "JavaScript" -Marke zu registrieren, hat Kontroversen verursacht. Ryan Dahl, der Sch?pfer von Node.js und Deno, hat eine Petition zur Absage der Marke eingereicht, und er glaubt, dass JavaScript ein offener Standard ist und nicht von Oracle verwendet werden sollte

Cacheapi ist ein Tool, das der Browser zur Cache -Netzwerkanfragen bereitstellt, das h?ufig in Verbindung mit dem Servicearbeiter verwendet wird, um die Leistung der Website und die Offline -Erfahrung zu verbessern. 1. Es erm?glicht Entwicklern, Ressourcen wie Skripte, Stilbl?tter, Bilder usw. Zu speichern; 2. Es kann die Cache -Antworten entsprechend den Anfragen übereinstimmen. 3. Es unterstützt das L?schen bestimmter Caches oder das L?schen des gesamten Cache. 4.. Es kann Cache -Priorit?ts- oder Netzwerkpriorit?tsstrategien durch Servicearbeiter implementieren, die sich auf Fetch -Ereignisse anh?ren. 5. Es wird h?ufig für die Offline -Unterstützung verwendet, die wiederholte Zugriffsgeschwindigkeit, die Vorspannungs -Schlüsselressourcen und den Inhalt des Hintergrundaktualisierungss beschleunigen. 6. Wenn Sie es verwenden, müssen Sie auf die Cache -Versionskontrolle, Speicherbeschr?nkungen und den Unterschied zum HTTP -Caching -Mechanismus achten.

Versprechen ist der Kernmechanismus für den Umgang mit asynchronen Operationen in JavaScript. Das Verst?ndnis von Kettenanrufen, Fehlerbehebung und Kombination ist der Schlüssel zum Beherrschen ihrer Anwendungen. 1. Der Kettenaufruf gibt ein neues Versprechen durch .then () zurück, um asynchrone Prozessverkampferung zu realisieren. Jeder. Dann () erh?lt das vorherige Ergebnis und kann einen Wert oder ein Versprechen zurückgeben; 2. Die Fehlerbehandlung sollte .Catch () verwenden, um Ausnahmen zu fangen, um stille Ausf?lle zu vermeiden, und den Standardwert im Fang zurückgeben, um den Prozess fortzusetzen. 3. Combinatoren wie Promise.All () (erfolgreich erfolgreich erfolgreich nach allen Erfolg), Versprechen.Race () (Die erste Fertigstellung wird zurückgegeben) und Versprechen.Allsettled () (Warten auf alle Fertigstellungen)

JavaScript-Array-integrierte Methoden wie .Map (), .filter () und .Reduce () k?nnen die Datenverarbeitung vereinfachen. 1) .Map () wird verwendet, um Elemente eins in eins um Neuarrays zu konvertieren; 2) .Filter () wird verwendet, um Elemente durch Bedingung zu filtern; 3) .Reduce () wird verwendet, um Daten als einzelner Wert zu aggregieren; Missbrauch sollte bei der Verwendung vermieden werden, was zu Nebenwirkungen oder Leistungsproblemen führt.

Die Ereignisschleife von JavaScript verwaltet asynchrone Vorg?nge, indem sie Call -Stapel, Webapis und Task -Warteschlangen koordinieren. 1. Der Anrufstack führt synchronen Code aus, und wenn er auf asynchrone Aufgaben begegnet, wird er zur Verarbeitung an Webapi übergeben. 2. Nachdem das Webapi die Aufgabe im Hintergrund abgeschlossen hat, wird der Rückruf in die entsprechende Warteschlange (Makroaufgabe oder Micro -Aufgabe) eingebaut. 3. Die Ereignisschleife prüft, ob der Anrufstapel leer ist. Wenn es leer ist, wird der Rückruf aus der Warteschlange herausgenommen und zur Ausführung in den Anrufstapel geschoben. V. 5. Das Verst?ndnis der Ereignisschleife hilft zu vermeiden, den Haupt -Thread zu blockieren und die Codeausführungsreihenfolge zu optimieren.

Ereignisblasen verbreiten sich vom Zielelement nach au?en zum Vorfahrknoten aus, w?hrend Ereignisfassungen sich von der ?u?eren Schicht nach innen zum Zielelement ausbreiten. 1. Ereignisblasen: Nach dem Klicken auf das untergeordnete Element l?st das Ereignis den H?rer des übergeordneten Elements nach oben aus. Nach dem Klicken auf die Schaltfl?che gibt es beispielsweise zuerst die untergeordnete und dann entzündete Eltern aus. 2. Ereigniserfassung: Stellen Sie den dritten Parameter auf True ein, so dass der H?rer in der Erfassungsstufe ausgeführt wird, z. B. das Ausl?sen des Capture -Listeners des übergeordneten Elements, bevor Sie auf die Schaltfl?che klicken. 3. Praktische Verwendungszwecke umfassen ein einheitliches Management von Ereignissen für Kinderelemente, Vorverarbeitung und Leistungsoptimierung von Abfangen. V.
