React Academy · Lektion

Contexts aufteilen, um erneute Renderings zu begrenzen

Trennen Sie häufig wechselnde Werte von stabilen Werten und legen Sie sie in unterschiedliche Contexts.

Lektion 1 von 413 Schritte

Contexts aufteilen, um erneute Renderings zu begrenzen ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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, React Contexts auf separate Provider aufzuteilen, um erneute Renderings zu minimieren, wenn sich nur ein Teil des Context-Werts ändert.

Das Problem erneuter Renderings bei Context

Jede Komponente, die useContext(MyCtx) aufruft, wird erneut gerendert, wenn sich IRGENDEIN Teil des Context-Werts ändert — selbst wenn sich der von ihr verwendete Teil nicht geändert hat. Ein einzelner großer Context kann viele unnötige erneute Renderings verursachen.

Nach Aktualisierungshäufigkeit aufteilen

Trennen Sie Werte, die sich häufig ändern, von solchen, die sich selten ändern. Legen Sie jede Gruppe in einem eigenen Context ab. Consumer abonnieren nur den Context, den sie benötigen.
const ThemeCtx = createContext('light');
const UserCtx = createContext(null);
// theme changes rarely; user changes on login/logout — same frequency is fine
// but notifCount changes every second — split it out!

Daten- und Dispatch-Contexts trennen

Ein verbreitetes Muster besteht darin, einen Context für Statusdaten (wird bei jeder Änderung erneut gerendert) und einen weiteren für Dispatch-/Setter-Funktionen (stabil, Consumer werden nie erneut gerendert) zu verwenden. Consumer, die nur Dispatch verwenden, werden bei Datenänderungen nie erneut gerendert.
const CountCtx = createContext(0);
const SetCountCtx = createContext(() => {});

function Provider({ children }) {
  const [count, setCount] = useState(0);
  return (
    <CountCtx.Provider value={count}>
      <SetCountCtx.Provider value={setCount}>
        {children}
      </SetCountCtx.Provider>
    </CountCtx.Provider>
  );
}

Dispatch-Context mit useMemo speichern

Setter aus useState sind stabil (bei jedem Rendern dieselbe Referenz), daher ändert sich der Wert des Dispatch-Contexts nicht. Wenn Sie jedoch ein Objekt mit Aktionen erstellen, schließen Sie es in useMemo ein.
const actions = useMemo(() => ({
  increment: () => setCount(c => c + 1),
  reset: () => setCount(0),
}), []); // stable — empty deps

Verschachtelte Provider

Verschachteln Sie mehrere Provider im Komponentenbaum. Consumer importieren und verwenden nur den jeweils benötigten Context, wodurch die Abonnements gezielt bleiben.
function App() {
  return (
    <AuthProvider>
      <ThemeProvider>
        <NotificationsProvider>
          <Router />
        </NotificationsProvider>
      </ThemeProvider>
    </AuthProvider>
  );
}

Vor dem Aufteilen profilieren

Profilieren Sie immer zuerst mit React DevTools, bevor Sie Contexts aufteilen. Unnötige erneute Renderings sind nur dann ein Problem, wenn sie aufwendig sind. Entwickeln Sie Contexts nicht übermäßig komplex, wenn sie schnell erneut gerendert werden können.

Kompromisse beim Aufteilen von Contexts

Mehr Contexts bedeuten mehr Provider im Komponentenbaum. Das erhöht den kognitiven Aufwand. Teilen Sie nur auf, wenn das Profiling ein Performanceproblem zeigt, nicht vorsorglich.

Mit React.memo kombinieren

Auch bei einem einzelnen Context werden aufwendige untergeordnete Komponenten, die in React.memo eingeschlossen sind, nur erneut gerendert, wenn sich ihre Props ändern — nicht wenn sich der Context ändert. Das kann eine einfachere Alternative zum Aufteilen sein.
const ExpensiveChild = React.memo(function({ label }) {
  return <div>{label}</div>;
}); // won't re-render on context change if label hasn't changed

useReducer + Context

Kombinieren Sie useReducer mit Context, um komplexe Statusdaten zu verwalten. Speichern Sie den Status in einem Context und die Dispatch-Funktion in einem anderen. Dispatch ist stabil; der Status wird bei jeder Aktion aktualisiert.

Kurze Überprüfung

Warum verbessert es die Performance, Status und Dispatch auf separate Contexts aufzuteilen?

Zusammenfassung

Teilen Sie Contexts nach Aktualisierungshäufigkeit auf: sich häufig ändernder Status in einem Context, stabile Dispatch-/Setter-Funktionen in einem anderen. Profilieren Sie zuerst, teilen Sie nur bei tatsächlichem Bedarf auf und ziehen Sie React.memo als einfachere Alternative in Betracht.

Als Nächstes

Nächste Lektion: **Context-Werte mit useMemo speichern** — Sie schließen Context-Wertobjekte in useMemo ein, damit Consumer bei unveränderten Daten nicht erneut gerendert werden.
Kostenlos starten

Lerne React mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
88
Lektionen
324

Häufig gestellte Fragen

Ist die Lektion „Contexts aufteilen, um erneute Renderings zu begrenzen“ kostenlos?

Ja — der vollständige Text von „Contexts aufteilen, um erneute Renderings zu begrenzen“ 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 „Contexts aufteilen, um erneute Renderings zu begrenzen“?

Trennen Sie häufig wechselnde Werte von stabilen Werten und legen Sie sie in unterschiedliche Contexts. 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 1 von 4.

Wie lange dauert die Lektion „Contexts aufteilen, um erneute Renderings zu begrenzen“?

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