0Pricing
React Academy · Lektion

Context-Werte mit useMemo memoizen

Umschließen Sie Context-Wertobjekte mit useMemo, damit Consumer nicht unnötig erneut gerendert werden.

Context-Werte mit useMemo memoizen ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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 lernen Sie, warum Context-Wertobjekte mit useMemo gespeichert werden müssen und wie Sie Abhängigkeiten korrekt einrichten, um unnötige erneute Renderings zu vermeiden.

Das Problem mit Objektreferenzen

Bei jedem erneuten Rendern einer Provider-Komponente wird ein neues Objektliteral `{ ... }` als Context-Wert erstellt — selbst wenn der Inhalt gleich bleibt. Alle Consumer werden erneut gerendert, weil sich die Referenz geändert hat.
// Every render creates a new object!
<UserCtx.Provider value={{ user, logout }}>
  {children}
</UserCtx.Provider>

Mit useMemo beheben

Schließen Sie den Context-Wert in useMemo ein, damit zwischen Renderings dieselbe Objektreferenz zurückgegeben wird, solange sich nichts im deps-Array geändert hat.
const value = useMemo(
  () => ({ user, logout }),
  [user, logout]
);

<UserCtx.Provider value={value}>
  {children}
</UserCtx.Provider>

Abhängigkeiten sorgfältig auswählen

Nehmen Sie jeden innerhalb von useMemo verwendeten Wert in das deps-Array auf. Fehlende Abhängigkeiten führen zu veralteten Werten. Schließen Sie primitive Props (Strings, Zahlen) und stabile Referenzen ein, etwa mit useCallback umschlossene Funktionen.

Stabile Funktionen mit useCallback

Funktionswerte ändern bei jedem Rendern ihre Referenz. Schließen Sie sie in useCallback ein, bevor Sie sie in einen useMemo-Context-Wert aufnehmen, um unnötige erneute Renderings zu vermeiden.
const logout = useCallback(() => {
  clearSession();
  setUser(null);
}, []);

const value = useMemo(() => ({ user, logout }), [user, logout]);

Wann Memoization unnötig ist

Wenn die Provider-Komponente nie erneut gerendert wird, zum Beispiel weil sie ganz oben im Baum liegt und sich ihr Parent nie ändert, verursacht useMemo zusätzlichen Aufwand ohne Nutzen. Verwenden Sie Memoization nur, wenn die Provider-Komponente selbst erneut gerendert wird.

Primitive Werte sind bereits stabil

Wenn Ihr Context-Wert ein primitiver Wert ist (String, Zahl, boolescher Wert), benötigen Sie useMemo NICHT — primitive Werte werden nach ihrem Wert und nicht nach ihrer Referenz verglichen. `value={isDark}` verursacht keine zusätzlichen erneuten Renderings.
// No useMemo needed for primitives
<ThemeCtx.Provider value={isDark ? 'dark' : 'light'}>
  {children}
</ThemeCtx.Provider>

Auswirkungen von Memoization profilieren

Verwenden Sie den Profiler von React DevTools, um zu überprüfen, ob das Einschließen des Context-Werts in useMemo tatsächlich erneute Renderings reduziert. Zeichnen Sie vor und nach der Änderung eine Sitzung auf, um den Unterschied bei der Anzahl der Commits zu sehen.

Verschachtelte memoizierte Contexts

Wenn mehrere Contexts verschachtelt sind, speichern Sie jeden unabhängig. Änderungen in einem Context wirken sich nicht auf den memoisierten Wert eines anderen aus.

Das Muster der Provider-Komponente

Kapseln Sie Context, Status und Memoization in einer eigenen Provider-Komponente. Exportieren Sie einen benutzerdefinierten Hook zum Konsumieren des Contexts. Dies ist das etablierte Muster für wiederverwendbare Contexts.
export function UserProvider({ children }) {
  const [user, setUser] = useState(null);
  const logout = useCallback(() => setUser(null), []);
  const value = useMemo(() => ({ user, logout }), [user, logout]);
  return <UserCtx.Provider value={value}>{children}</UserCtx.Provider>;
}

export const useUser = () => useContext(UserCtx);

Kurze Überprüfung

Was ist der wichtigste Grund dafür, ein Context-Wertobjekt in useMemo einzuschließen?

Zusammenfassung

Schließen Sie Context-Wertobjekte mit den korrekten deps in useMemo ein. Stabilisieren Sie Funktionswerte mit useCallback. Primitive Werte benötigen keine Memoization. Kapseln Sie die Einrichtung des Contexts in einer Provider-Komponente mit einem benutzerdefinierten Hook.

Als Nächstes

Nächste Lektion: **Context-Selector-Muster** — Sie implementieren einen Selector-Hook, der Consumer nur dann erneut rendert, wenn sich ein bestimmter Teil des Contexts ändert.

Häufig gestellte Fragen

Ist die Lektion „Context-Werte mit useMemo memoizen“ kostenlos?

Ja — der vollständige Text von „Context-Werte mit useMemo memoizen“ 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-Werte mit useMemo memoizen“?

Umschließen Sie Context-Wertobjekte mit useMemo, damit Consumer nicht unnötig erneut gerendert werden. 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 2 von 4.

Wie lange dauert die Lektion „Context-Werte mit useMemo memoizen“?

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