React Academy · Les

Contextwaarden memoizen met useMemo

Wikkel objecten met contextwaarden in useMemo, zodat consumers niet onnodig opnieuw renderen.

Les 2 van 413 stappen

Contextwaarden memoizen met useMemo is een gratis React Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Welkom

In deze les leer je waarom contextwaardeobjecten met useMemo moeten worden gememoïseerd en hoe je afhankelijkheden correct instelt om onnodige her-renderingen te voorkomen.

Het probleem met objectreferenties

Elke keer dat een providercomponent opnieuw wordt gerenderd, wordt een nieuwe objectliteral `{ ... }` als contextwaarde gemaakt — zelfs als de inhoud hetzelfde is. Alle gebruikers van de context worden opnieuw gerenderd omdat de referentie is veranderd.
// Every render creates a new object!
<UserCtx.Provider value={{ user, logout }}>
  {children}
</UserCtx.Provider>

Oplossen met useMemo

Wikkel de contextwaarde in useMemo, zodat tussen renderingen dezelfde objectreferentie wordt teruggegeven wanneer niets in de afhankelijkhedenarray is veranderd.
const value = useMemo(
  () => ({ user, logout }),
  [user, logout]
);

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

Afhankelijkheden zorgvuldig kiezen

Neem elke waarde die binnen useMemo wordt gebruikt op in de afhankelijkhedenarray. Ontbrekende afhankelijkheden veroorzaken verouderde waarden. Neem primitieve props, zoals tekenreeksen en getallen, en stabiele referenties op, zoals functies die in useCallback zijn verpakt.

Stabiele functies met useCallback

Functiewaarden krijgen bij elke render een andere referentie. Wikkel ze in useCallback voordat je ze opneemt in een contextwaarde met useMemo, zodat onnodige her-renderingen worden voorkomen.
const logout = useCallback(() => {
  clearSession();
  setUser(null);
}, []);

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

Wanneer memoization niet nodig is

Als het providercomponent nooit opnieuw wordt gerenderd, bijvoorbeeld omdat het helemaal bovenaan de boom staat en de ouder nooit verandert, voegt useMemo extra werk toe zonder voordeel. Memoiseer alleen wanneer de provider zelf opnieuw wordt gerenderd.

Primitieve waarden zijn al stabiel

Als je contextwaarde een primitieve waarde is, zoals een tekenreeks, getal of booleaan, heb je useMemo NIET nodig — primitieve waarden worden op basis van hun waarde vergeleken, niet op basis van hun referentie. `value={isDark}` veroorzaakt geen extra her-renderingen.
// No useMemo needed for primitives
<ThemeCtx.Provider value={isDark ? 'dark' : 'light'}>
  {children}
</ThemeCtx.Provider>

Het effect van memoization profileren

Gebruik de profiler van React DevTools om te controleren of het wikkelen van de contextwaarde in useMemo daadwerkelijk het aantal her-renderingen vermindert. Neem vóór en na de wijziging een sessie op om het verschil in het aantal commits te zien.

Geneste gememoïseerde contexten

Wanneer meerdere contexten genest zijn, memoiseer je elke context afzonderlijk. Wijzigingen in de ene context hebben geen invloed op de gememoïseerde waarde van een andere context.

Het patroon van het providercomponent

Kapsel de context, status en memoization in een speciaal providercomponent in. Exporteer een aangepaste hook om de context te gebruiken. Dit is het gangbare patroon voor herbruikbare contexten.
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);

Korte controle

Wat is de belangrijkste reden om een contextwaardeobject in useMemo te wikkelen?

Samenvatting

Wikkel contextwaardeobjecten met de juiste afhankelijkheden in useMemo. Houd functiewaarden stabiel met useCallback. Primitieve waarden hebben geen memoization nodig. Kapsel de configuratie van de context in een providercomponent met een aangepaste hook in.

Volgende

Volgende les: **Het contextselectorpatroon** — je implementeert een selectorhook die gebruikers van de context alleen opnieuw laat renderen wanneer een specifiek deel van de context verandert.
Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Contextwaarden memoizen met useMemo” gratis?

Ja — de volledige tekst van “Contextwaarden memoizen met useMemo” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Contextwaarden memoizen met useMemo”?

Wikkel objecten met contextwaarden in useMemo, zodat consumers niet onnodig opnieuw renderen. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Contextwaarden memoizen met useMemo”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Contexten opsplitsen om re-renders te beperken
  2. Contextwaarden memoizen met useMemo
  3. Het contextselectiepatroon
  4. Wanneer u Context niet moet gebruiken
← Terug naar React Academy