0Pricing
React Academy · Lektion

Context-Selector-Pattern

Implementieren Sie einen einfachen Selector-Hook, der nur dann ein erneutes Rendering auslöst, wenn sich ein Teil des Contexts ändert.

Context-Selector-Pattern ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Willkommen

In dieser Lektion implementieren Sie einen Context-Selector-Hook, der eine Komponente nur an einen Teil des Context-Status bindet und erneute Renderings verhindert, wenn sich andere Teile des Contexts ändern.

Das Selector-Problem

useContext rendert eine Komponente erneut, wenn sich IRGENDEIN Teil des Contexts ändert. Wenn eine Komponente nur den Namen des Benutzers benötigt, der Context aber auch eine Benachrichtigungsliste enthält, wird die Namenskomponente durch das Hinzufügen einer Benachrichtigung unnötig erneut gerendert.

Was ist ein Selector?

Ein Selector ist eine Funktion, die einen bestimmten Teil des Status aus einem größeren Statusobjekt extrahiert: `state => state.user.name`. Ein Selector-Hook abonniert den Context, löst aber nur dann ein erneutes Rendern aus, wenn sich der ausgewählte Wert ändert.

Einfacher Selector-Hook

Erstellen Sie einen useSelector-Hook, der den Context ausliest und ihn mit useMemo speichert, wobei das Ergebnis des Selectors als Abhängigkeit dient. Die Komponente wird nur dann erneut gerendert, wenn sich der ausgewählte Wert ändert.
function useAppSelector(selector) {
  const state = useContext(AppCtx);
  return useMemo(() => selector(state), [state, selector]);
}

// Consumer only re-renders when user.name changes
const name = useAppSelector(s => s.user.name);

Prüfung auf flache Gleichheit

Auch useMemo mit einem Selector führt zu einem erneuten Rendern, wenn der Selector bei jedem Aufruf eine neue Objekt-/Array-Referenz zurückgibt, zum Beispiel `s => s.items.filter(...)`. Verwenden Sie einen Vergleich auf flache Gleichheit, um erneute Renderings zu überspringen, wenn der Inhalt gleich bleibt.
import { useRef } from 'react';

function useSelector(selector) {
  const state = useContext(AppCtx);
  const selected = selector(state);
  const ref = useRef(selected);
  if (!shallowEqual(ref.current, selected)) {
    ref.current = selected;
  }
  return ref.current;
}

use-context-selector-Bibliothek

Für den produktiven Einsatz bietet die Bibliothek **use-context-selector** einen `useContextSelector`-Hook mit effizientem Abonnement und Gleichheitsprüfungen — ohne externe State-Manager zu benötigen.
import { useContextSelector } from 'use-context-selector';

const name = useContextSelector(AppCtx, s => s.user.name);

Zustand als Selector-native Lösung

Der `useStore(selector)`-Hook von Zustand unterstützt Selector standardmäßig und bietet direkt eine flache Gleichheitsprüfung. Dadurch eignet er sich besonders für große Statusbäume, bei denen fein abgestufte Abonnements wichtig sind.
const name = useAppStore(state => state.user.name);

Wann Selector übertrieben sind

Wenn Context-Aktualisierungen selten auftreten und Consumer kostengünstig erneut gerendert werden können, erhöhen Selector die Komplexität ohne messbaren Nutzen. Profilieren Sie zuerst — optimieren Sie immer auf Grundlage von Fakten.

Selector-Funktionen speichern

Wenn Sie den Selector inline im Komponentenrumpf erstellen, erhält er bei jedem Rendern eine neue Funktionsreferenz, wodurch Memoization möglicherweise unwirksam wird. Definieren Sie Selector außerhalb der Komponente oder verwenden Sie useCallback.
// Outside component — stable reference
const selectName = s => s.user.name;

function Profile() {
  const name = useAppSelector(selectName);
  return <p>{name}</p>;
}

Abgeleitete Selector

Kombinieren Sie Selector, indem Sie einen Selector innerhalb eines anderen aufrufen. Abgeleitete Selector berechnen Werte aus Basis-Selector und halten die Geschäftslogik aus den Komponenten heraus.
const selectFullName = s => s.user.firstName + ' ' + s.user.lastName;

Kurze Überprüfung

Warum sollten Selector-Funktionen außerhalb des Komponentenrumpfs definiert werden, wenn sie mit useContextSelector oder useMemo verwendet werden?

Zusammenfassung

Selector extrahieren einen Teil des Context-Status und verhindern erneute Renderings, wenn sich andere Teile ändern. Definieren Sie Selector außerhalb von Komponenten, damit ihre Referenzen stabil bleiben. Verwenden Sie use-context-selector oder Zustand für eine produktionsgeeignete Selector-Unterstützung.

Als Nächstes

Nächste Lektion: **Wann Context nicht verwendet werden sollte** — Sie lernen zu erkennen, wann die Übergabe von Props, Komposition oder ein State-Manager besser geeignet ist als Context.

Häufig gestellte Fragen

Ist die Lektion „Context-Selector-Pattern“ kostenlos?

Ja — der vollständige Text von „Context-Selector-Pattern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Context-Selector-Pattern“?

Implementieren Sie einen einfachen Selector-Hook, der nur dann ein erneutes Rendering auslöst, wenn sich ein Teil des Contexts ändert. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Context-Selector-Pattern“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Contexts aufteilen, um erneute Renderings zu begrenzen
  2. Context-Werte mit useMemo memoizen
  3. Context-Selector-Pattern
  4. Wann Sie Context nicht verwenden sollten
← Zurück zu React Academy