Inhaltsverzeichnis
2. Usecontext: State Sharing State über Komponenten hinweg
3. Custom Hooks: Logik wiederverwenden, nicht nur die Benutzeroberfläche
Letzte Gedanken
Heim Web-Frontend Front-End-Fragen und Antworten Advanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks

Advanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks

Oct 04, 2025 am 06:27 AM

Der Usereducer ist ideal für eine komplexe Zustandslogik mit vorhersehbaren Übergängen unter Verwendung von Aktionen und einer Reduzierfunktion. 2. Usecontext eliminiert Prop -Bohrungen, indem er den Zugriff auf gemeinsam genutzten Zustand im Komponentenbaum ermöglicht, wenn er mit einem Anbieter gepaart wird. 3.. Benutzerdefinierte Haken wie Usefetch -Kapiteller und Wiederverwendung der Logik über Komponenten hinweg und fördern Sie sauberen, aufhaltbaren Code. Zusammen bieten diese fortgeschrittenen Hooks eine skalierbare staatliche Verwaltung und logische Wiederverwendung ohne externe Bibliotheken.

Advanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks

Wenn Sie die Grundlagen von React gemeistert haben - useState , useEffect und den Komponentenlebenszyklus - ist es Zeit, sich zu verbessern. Fortgeschrittene Hooks wie useReducer , useContext und benutzerdefinierte Hooks helfen Ihnen bei der Verwaltung komplexer Zustandslogik, teilen den Status über Komponenten hinweg und halten Ihren Code sauber und wiederverwendbar. Lassen Sie uns aufschlüsseln, wie und wann Sie sie effektiv verwenden müssen.

Advanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks

1. Userducer: Verwaltung der komplexen Zustandslogik

useState eignet sich hervorragend für einen einfachen Zustand - einen Zähler, einen Umschalter oder eine Formeingabe. Wenn Ihre Zustandslogik jedoch komplexer wird (mehrere Unterwerte, Übergänge auf der Grundlage des vorherigen Zustands oder Aktionen, die von den Bedingungen abhängen), strahlt useReducer .

Es folgt dem Redux -Muster: Sie definieren eine Reduzierfunktion , die den aktuellen Zustand und eine Aktion ausführt, und gibt dann den neuen Zustand zurück.

Advanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks
 const initialState = {count: 0};

Funktion Gegenbekannung (Zustand, Aktion) {
  Switch (action.type) {
    Fall "Inkrement":
      return {count: state.count 1};
    Fall "Dekrement":
      return {count: state.count - 1};
    Fall 'Reset':
      Initialstate zurückgeben;
    Standard:
      Neuen Fehler () werfen;
  }
}

Funktion counter () {
  const [Zustand, Versand] = Userducer (Gegenbekannter, InitialState);

  zurückkehren (
    <div>
      Graf: {state.count}
      <button onclick = {() => Dispatch ({Typ: &#39;Decrement&#39;})}>-</button>
      <button onclick = {() => Dispatch ({Typ: &#39;Increment&#39;})}> </button>
      <button onclick = {() => Dispatch ({type: &#39;reset&#39;})}> reset </button> reset reset
    </div>
  );
}

Warum useReducer verwenden?

  • Zentralisiert die Staatslogik an einem Ort.
  • Macht Zustandsübergänge vorhersehbar.
  • Ideal für Formen, Zauberer oder einen Mehrschritt-UI-Fluss.
  • Funktioniert gut mit useContext für den globalen Staat.

TIPP: Sie können auch eine Initialisiererfunktion an useReducer zur faulen Initialisierung des Zustands übergeben.

Advanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks

2. Usecontext: State Sharing State über Komponenten hinweg

Das Abgeben von Requisiten durch mehrere Ebenen (Prop -Bohrungen) wird schnell unordentlich. useContext können Sie überall im Komponentenbaum auf Shared Status zugreifen, ohne die Requisiten manuell zu übergeben.

Kombinieren Sie es mit useReducer um ein leichtes globales staatliches System aufzubauen.

 // Kontext erstellen
const countcontext = react.createContext ();

// Anbieterkomponente
Funktion countProvider ({Kinder}) {
  const [Zustand, Versand] = Usereducer (Gegenbekannter, {count: 0});

  zurückkehren (
    <CountContext.provider value = {{State, Dispatch}}>
      {Kinder}
    </CountContext.Provider>
  );
}

// benutzerdefinierte Haken, um den Kontext zu verwenden (sauberer und sicherer)
Funktion usecount () {
  const context = usecontext (countContext);
  Wenn (! Kontext) neue Fehler werfen (&#39;UseCount muss in countProvider verwendet werden&#39;);
  Kontext zurückgeben;
}

// benutze es tief im Baum
Funktion DeepComponent () {
  const {Status, Dispatch} = useCount ();

  zurückkehren (
    <div>
      <p> count: {state.count} </p>
      <button onclick = {() => Dispatch ({Typ: &#39;Increment&#39;})}> 1 </button>
    </div>
  );
}

// Wickeln Sie Ihre App ein
Funktion App () {
  zurückkehren (
    <CountProvider>
      <Eplescomponent />
    </CountProvider>
  );
}

Best Practices:

  • Erstellen Sie immer einen benutzerdefinierten Haken, um useContext zu wickeln - er verhindert Fehler und verbessert die Wiederverwendbarkeit.
  • Verwenden Sie für Thema, Auth, Sprache oder einen appweiten Zustand.
  • Vermeiden Sie es, es für alles zu überwinden - es ist kein Ersatz für alle staatlichen Managements.

3. Custom Hooks: Logik wiederverwenden, nicht nur die Benutzeroberfläche

Benutzerdefinierte Hooks sind Funktionen, die andere Hooks verwenden, um die Logik zu verkapulieren und wiederzuverwenden. Sie beginnen mit use und befolgen die gleichen Regeln wie reguläre Haken.

Nehmen wir an, Sie holen Daten an mehreren Stellen. Anstatt useState zu wiederholen und useEffect , erstellen Sie useFetch .

 Funktionsnutzung (URL) {
  const [data, setData] = usustate (null);
  const [laden, setloading] = usustate (true);
  const [Fehler, setError] = usustate (null);

  useEffect (() => {
    const fetchdata = async () => {
      versuchen {
        const res = wartet abfang (url);
        const json = warte res.json ();
        setdata (JSON);
      } catch (err) {
        setError (err);
      } Endlich {
        setloading (false);
      }
    };

    fetchdata ();
  }, [url]);

  zurückgeben {Daten, Laden, Fehler};
}

Verwenden Sie es jetzt überall:

 Funktion userProfile ({userID}) {
  const {data, laden, fehler} = nutzfass (`/api/user/$ {userId}`);

  if (laden) return <p> laden ... </p>;
  if (Fehler) return <p> Fehler: {error.message} </p>;

  return <div> {data.name} </div>;
}

Weitere Ideen für benutzerdefinierte Haken:

  • useLocalStorage : Synchronisierungsstatus mit localStorage .
  • useForm : Formulareingänge, Validierung, Einreichung.
  • useOutsideClick : Klicks außerhalb eines Elements erkennen.
  • useDebounce : Entdecken Sie Werte oder Rückrufe.

Ein gutes benutzerdefiniertes Haken -Abstracts -Verhalten , nicht nur Zustand. Es sollte eine komplexe Logik einfach zu bedienen machen.


Letzte Gedanken

  • useReducer bringt Struktur in komplexe Staatsaktualisierungen.
  • useContext eliminiert Prop -Bohrungen und ermöglicht den globalen Zustand (wenn er mit Bedacht verwendet wird).
  • Mit benutzerdefinierten Hooks können Sie die Logik über Komponenten extrahieren und wiederverwenden.

Gemeinsam befähigen sie Sie, skalierbare, wartbare React -Apps zu schreiben, ohne sofort nach externen Bibliotheken zu greifen.

Grundsätzlich werden diese Tools, sobald Sie die Grundlagen hinter sich haben, für die Verwaltung der realen Komplexität von entscheidender Bedeutung-sauber und effizient.

Das obige ist der detaillierte Inhalt vonAdvanced React Hooks: Usereducer, Usecontext und benutzerdefinierte Hooks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT

Stock Market GPT

KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie man einen Textbereich mit CSS stymt Wie man einen Textbereich mit CSS stymt Sep 16, 2025 am 07:00 AM

Setzen Sie zunächst grundlegende Stile wie Breite, Höhe, Ränder, Grenzen, Schriftarten und Farben; 2. Verbesserung des interaktiven Feedbacks durch: schwebe und: fokussierte Zustände; 3.. Verwenden Sie das Größenattribut, um das Verhalten der Größe zu steuern. V. 5. Responsive Design verwenden, um die Verfügbarkeit der Kreuzung zu gewährleisten. 6. Achten Sie auf die Korrelation von Etiketten, Farbkontrast und Fokusumrisse, um die Zugänglichkeit zu gewährleisten, und letztendlich einen schönen und funktionalen Textbereichstil zu erreichen.

So erstellen Sie eine Fortschrittsleiste in Bootstrap So erstellen Sie eine Fortschrittsleiste in Bootstrap Sep 20, 2025 am 05:21 AM

Erstellen Sie einen grundlegenden Fortschrittsbalken mit .progress-Container- und .progress-Bar-Element und setzen Sie die Breite durch style = "width: 50%"; und Aria -Attribute hinzufügen, um die Zugänglichkeit zu verbessern. 2. Sie können direkt Text wie "75%" hinzufügen, um Fortschritts-Tags in .Progress-Bar anzuzeigen. 3.. Sie können verschiedene Farben durch BG-Success, BG-Warning, BG-Danger und andere Klassen einstellen. 4. Fügen Sie. Progress-Bar-Striped hinzu, um den Streifeneffekt zu erzielen, und kombinieren Sie. Progress-Bar-Animated, um den Streifen dynamisch zu bewegen. 5. Multiple .Progr

So verwenden Sie das Zeit -Tag in HTML So verwenden Sie das Zeit -Tag in HTML Sep 19, 2025 am 03:35 AM

Thetagisusesedtorepresentdatesandtimesinamachine-lesableFormatWiledisePlayan-readablETEXT.2.SUPPORTSVARIOUSDATETIMEFORMATSINCLUDINGDATEONLY, TIMEONLY, DATEANDTIMEWITHZONE und PARTIALDATESVIADEDEDETIMEATTRIBUTRIBUTTEFOLFOLFOLOSOWISHINGEISOMINGENISTAGE

Was ist der Unterschied zwischen einer absoluten und einer relativen URL in HTML? Was ist der Unterschied zwischen einer absoluten und einer relativen URL in HTML? Sep 16, 2025 am 07:57 AM

AnabsoluteurlinCludesthefulwebaddresswithProtocolanddomain, whilearelativeurlspecifiesapathrelativetothe

Wie man ein Video in HTML stummschaltet Wie man ein Video in HTML stummschaltet Sep 17, 2025 am 03:24 AM

TomuteavideoinHTML,usethemutedbooleanattributeinthetag,whichsilencestheaudiobydefault.2.Fordynamiccontrol,useJavaScripttosetvideo.muted=trueorfalse,ortoggleitwithvideo.muted=!video.mutedforinteractivemute/unmutefunctionality.3.Combinemutedwithautopla

So erhalten Sie den Maximalwert in einem Array in JavaScript So erhalten Sie den Maximalwert in einem Array in JavaScript Sep 21, 2025 am 06:02 AM

Usemath.max (... Array) ForsmalltomediumArrays; 2.Usemath.max.Apply (Null, Array) ForbetterCompatibilitätswithlargearraySeren -Umgebung; 3.Usered () Forlargearrayswithmortrol;

Wie man Text mit CSS reagiert Wie man Text mit CSS reagiert Sep 15, 2025 am 05:48 AM

TomaketexTresponsiveIncss, userelativeUnitslikerem, VW und Clamp () mit mediaqueries.1.ReplaceFixedPixelsWithremforConsistentsCali ngbasedonrootfontsize.2.usevwforfluidscalingButcombineWithCalc () orclamp () topreventExtremes.3.ApplyMediaqueriesatcommonbreakpo

Ein praktischer Leitfaden für die Rendering -Pipeline des Browsers Ein praktischer Leitfaden für die Rendering -Pipeline des Browsers Sep 21, 2025 am 06:30 AM

TheBrowserrenderswebpagesByParsinghtmlandcssintothedomandcssoms, kombininierende THEMintoarendertree, PerformingLayoutTocalculateelementGeometry, PaintingPixel und CompositingLayers.2.TooptimizePerance, Minimizer-BlockingResourcesByinSy-IsourcesByinSy-IsourcesByIncriticalcScsssan

See all articles