Heim Web-Frontend js-Tutorial Unterschätzter React Hook – useSyncExternalStore

Unterschätzter React Hook – useSyncExternalStore

Jul 18, 2024 pm 12:16 PM

Image description

Überblick

Entdecken Sie ein verstecktes Kraftpaket im React-Ökosystem: den „useSyncExternalStore“-Hook. Dieser Artikel befasst sich mit seinem transformativen Potenzial und stellt traditionelle Paradigmen der Staatsverwaltung in Frage. Durch die nahtlose Integration externer Datenquellen und die Verbesserung der komponentenübergreifenden Kommunikation bietet dieser Hook einen unkonventionellen und dennoch leistungsstarken Ansatz.

Reisen Sie mit uns, während wir useSyncExternalStore entmystifizieren. Wir analysieren seine Mechanismen, enthüllen seine Vorteile und zeigen praktische Anwendungen anhand von Beispielen aus der Praxis. Am Ende werden Sie verstehen, wie Sie diesen Haken nutzen können, um die Komplexität zu rationalisieren, die Leistung zu steigern und Ihrer Codebasis eine neue Ebene der Organisation zu verleihen.

Verwendung

Laut React ist useSyncExternalStore ein React-Hook, mit dem Sie einen externen Store abonnieren können. Aber was genau ist ein „externer Speicher“? Es übernimmt buchstäblich zwei Funktionen:

  • Die Abonnementfunktion sollte den Store abonnieren und eine Funktion zum Abbestellen zurückgeben.
  • Die getSnapshot-Funktion sollte einen Snapshot der Daten aus dem Store lesen. Okay, es könnte zunächst schwierig sein, es zu bekommen. Wir können auf das Beispiel eingehen.

Die Demo

Für unsere heutige Demo gehe ich auf eine klassische Anwendung ein: Die „Todo-Liste“.

Der Laden

Zuerst müssen wir den Ausgangszustand definieren:

export type Task = {
  id: string;
  content: string;
  isDone: boolean;
};

export type InitialState = {
  todos: Task[];
};

export const initialState: InitialState = { todos: [] };
Nach dem Login kopieren

Sie können sehen, dass ich die Typen definiert und dann den Status mit den Aufgaben als leeres Array erstellt habe

Jetzt ist der Reduzierer:

export function reducer(state: InitialState, action: any) {
  switch (action.type) {
    case "ADD_TASK":
      const task = {
        content: action.payload,
        id: uid(),
        isDone: false,
      };
      return {
        ...state,
        todos: [...state.todos, task],
      };

    case "REMOVE_TASK":
      return {
        ...state,
        todos: state.todos.filter((task) => task.id !== action.payload),
      };

    case "COMPLETE_TASK":
      const tasks = state.todos.map((task) => {
        if (task.id === action.payload) {
          task.isDone = !task.isDone;
        }
        return task;
      });
      return {
        ...state,
        todos: tasks,
      };

    default:
      return state;
  }
}
Nach dem Login kopieren

Unser Reduzierer hat nur 3 Aktionen: ADD_TASK, REMOVE_TASK und COMPLETE_TASK. Dies ist das klassische Beispiel einer To-Do-Listen-Logik.

Endlich, worauf wir warten, der Laden:

let listeners: any[] = [];

function createStore(reducer: any, initialState: InitialState) {
  let state = initialState;

  function getState() {
    return state;
  }

  function dispatch(action: any) {
    state = reducer(state, action);

    emitChange();
  }

  function subscribe(listener: any) {
    listeners = [...listeners, listener];
    return () => {
      listeners = listeners.filter((l) => l !== listener);
    };
  }

  const store = {
    dispatch,
    getState,
    subscribe,
  };

  return store;
}

function emitChange() {
  for (let listener of listeners) {
    listener();
  }
}

export const store = createStore(reducer, initialState);
Nach dem Login kopieren

Dieser Codeausschnitt veranschaulicht die Erstellung eines einfachen Redux-ähnlichen Zustandsverwaltungssystems in TypeScript. Hier ist eine Aufschlüsselung, wie es funktioniert:

  1. Listeners-Array: Dieses Array enthält eine Liste von Listener-Funktionen, die benachrichtigt werden, wenn sich der Status ändert.

  2. createStore-Funktion: Diese Funktion ist für die Erstellung eines Stores im Redux-Stil verantwortlich. Es werden zwei Parameter benötigt:

  • Reduzierer: Eine Reduzierfunktion, die für die Berechnung des nächsten Status basierend auf dem aktuellen Status und der gesendeten Aktion verantwortlich ist.
  • initialState: Der Anfangszustand der Anwendung.
  1. Status: Diese Variable enthält den aktuellen Status der Anwendung.

  2. getState-Funktion: Gibt den aktuellen Status zurück.

  3. Dispatch-Funktion: Akzeptiert ein Aktionsobjekt, übergibt es zusammen mit dem aktuellen Status an den Reduzierer, aktualisiert den Status mit dem Ergebnis und ruft dann die emitChange-Funktion auf, um Listener über die Statusänderung zu benachrichtigen.

  4. subscribe-Funktion: Akzeptiert eine Listener-Funktion, fügt sie dem Listeners-Array hinzu und gibt eine Bereinigungsfunktion zurück, die aufgerufen werden kann, um den Listener zu entfernen.

  5. Store-Objekt: Das erstellte Store-Objekt enthält Verweise auf die Funktionen „dispatch“, „getState“ und „subscribe“.

  6. emitChange-Funktion: Durchläuft das Listener-Array und ruft jede Listener-Funktion auf, um sie über eine Statusänderung zu informieren.

Am Ende des Codes wird mithilfe der Funktion „createStore“ ein Store mit einem bestimmten Reduzierer und einem bestimmten Anfangszustand erstellt. Dieser Speicher kann nun importiert und in anderen Teilen der Anwendung verwendet werden, um den Status zu verwalten und zu steuern.

Es ist wichtig zu beachten, dass dieser Code eine vereinfachte Implementierung eines Zustandsverwaltungssystems bietet und einige erweiterte Funktionen und Optimierungen fehlt, die in Bibliotheken wie Redux zu finden sind. Es dient jedoch als guter Ausgangspunkt, um die Grundkonzepte der Zustandsverwaltung mithilfe von Listenern und einer Reduzierfunktion zu verstehen.

Um den useSyncExternalStore-Hook zu verwenden. Wir können den Zustand wie folgt ermitteln:

const { todos } = useSyncExternalStore(store.subscribe, store.getState);
Nach dem Login kopieren

Mit diesem Hook-Aufruf können wir global und dynamisch auf den Store zugreifen und gleichzeitig die Lesbarkeit und Wartbarkeit beibehalten

Für und Wider

Der „useSyncExternalStore“-Hook bietet sowohl Vorteile als auch potenzielle Nachteile im Kontext der Statusverwaltung innerhalb einer React-Anwendung:

Vorteile:

  1. Nahtlose Integration mit externen Quellen: Der Hook ermöglicht eine mühelose Integration mit externen Datenquellen und fördert so einen einheitlichen Ansatz für die Zustandsverwaltung. Diese Integration kann die Handhabung von Daten unterschiedlicher Herkunft vereinfachen und den Zusammenhalt der Anwendung verbessern.

  2. Komponentenübergreifende Kommunikation: „useSyncExternalStore“ erleichtert die effiziente Kommunikation zwischen Komponenten, rationalisiert den Datenaustausch und reduziert den Bedarf an komplexem Propellerbohren oder Kontextmanagement.

  3. Leistungsverbesserungen: Durch die Zentralisierung der Statusverwaltung und die Minimierung der Verbreitung von Statusaktualisierungen hat dieser Hook das Potenzial, die Rendering-Leistung zu optimieren, was zu einer reaktionsschnelleren und effizienteren Anwendung führt.

  4. Einfachheit und sauberer Code: Die abstrahierte API des Hooks kann zu saubererem und besser organisiertem Code führen, wodurch er einfacher zu verstehen und zu warten ist, insbesondere in großen Anwendungen.

  5. Reduzierter Boilerplate: „useSyncExternalStore“ kann die Notwendigkeit reduzieren, redundanten Code für die Zustandsverwaltung zu schreiben, und bietet eine präzise und konsistente Möglichkeit, den anwendungsweiten Zustand zu verwalten.

Nachteile:

  1. Lernkurve: Entwickler, die mit diesem Hook nicht vertraut sind, können beim Umstieg von etablierteren Zustandsverwaltungslösungen eine Lernkurve erleben. Die Anpassung an einen neuen Ansatz könnte die Entwicklung zunächst verlangsamen.

  2. Anpassungseinschränkungen: Die vordefinierten Funktionen des Hooks passen möglicherweise nicht perfekt zu den individuellen Anforderungen jeder Anwendung. Das Anpassen des Verhaltens, das über die Fähigkeiten des Hooks hinausgeht, kann zusätzliche Problemumgehungen erforderlich machen.

  3. Potenzieller Abstraktions-Overhead: Abhängig von seiner internen Mechanik kann der Hook im Vergleich zu optimierteren Lösungen, die speziell auf die Anforderungen der Anwendung zugeschnitten sind, zu einem leichten Overhead bei Leistung oder Speichernutzung führen.

  4. Community und Ökosystem: Als unterschätzter oder weniger bekannter Hook verfügt „useSyncExternalStore“ möglicherweise nicht über eine gut etablierte Community und ein umfassendes Ökosystem, was möglicherweise dazu führt, dass weniger Ressourcen oder Bibliotheken von Drittanbietern verfügbar sind .

  5. Kompatibilität und zukünftige Updates: Die Kompatibilität mit zukünftigen Versionen von React und mögliche Updates des Hooks selbst könnten Anlass zur Sorge geben. Die Gewährleistung eines langfristigen Supports und nahtloser Upgrades kann besondere Sorgfalt erfordern.

Abschluss

Zusammenfassend bietet useSyncExternalStore einen einzigartigen Ansatz für die Zustandsverwaltung, der den Schwerpunkt auf nahtlose Integration und komponentenübergreifende Kommunikation legt. Obwohl es mehrere Vorteile bietet, wie z. B. verbesserte Leistung und vereinfachten Code, sollten Entwickler die Kompatibilität mit den Anforderungen ihres Projekts sorgfältig bewerten und die potenzielle Lernkurve und Einschränkungen berücksichtigen.

Das obige ist der detaillierte Inhalt vonUnterschätzter React Hook – useSyncExternalStore. 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

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.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

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

Java-Tutorial
1666
14
PHP-Tutorial
1273
29
C#-Tutorial
1255
24
JavaScript -Engines: Implementierungen vergleichen JavaScript -Engines: Implementierungen vergleichen Apr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Von C/C nach JavaScript: Wie alles funktioniert Von C/C nach JavaScript: Wie alles funktioniert Apr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript und das Web: Kernfunktionalität und Anwendungsfälle JavaScript und das Web: Kernfunktionalität und Anwendungsfälle Apr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

JavaScript in Aktion: Beispiele und Projekte in realer Welt JavaScript in Aktion: Beispiele und Projekte in realer Welt Apr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Verständnis der JavaScript -Engine: Implementierungsdetails Verständnis der JavaScript -Engine: Implementierungsdetails Apr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python gegen JavaScript: Community, Bibliotheken und Ressourcen Python gegen JavaScript: Community, Bibliotheken und Ressourcen Apr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Python vs. JavaScript: Entwicklungsumgebungen und Tools Python vs. JavaScript: Entwicklungsumgebungen und Tools Apr 26, 2025 am 12:09 AM

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

See all articles