React Academy · Lektion

Selectors och förhindra onödiga omrenderingar

Extrahera specifika state-delar via selectors så att komponenter endast renderas om vid behov.

Lektion 2 av 413 steg

Selectors och förhindra onödiga omrenderingar är en gratis lektion i React Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Välkommen

I den här lektionen kommer ni att använda Zustand-selectors för att låta komponenter prenumerera endast på de delar av state de behöver och därmed förhindra onödiga omrenderingar när andra delar av storet ändras.

Problemet med standard-selectorn

Om ni anropar store-hooken utan en selector returneras hela store-objektet. Komponenten renderas om vid VARJE ändring i storet, även vid ändringar i state som inte hör ihop med komponenten.
// Bad: re-renders on every store change
const store = useAppStore();
return <p>{store.user.name}</p>;

Använda en selector

Skicka en selector-funktion till store-hooken. Komponenten renderas bara om värdet som selectorn returnerar ändras.
// Good: re-renders only when user.name changes
const name = useAppStore(s => s.user.name);
return <p>{name}</p>;

Kontroll av referenslikhet

Zustand använder strikt likhet (===) som standard. Om selectorn returnerar ett nytt objekt eller en ny array vid varje anrop renderas komponenten om även när innehållet är detsamma.
// Creates a new object every time — always re-renders!
const info = useStore(s => ({ id: s.id, name: s.name }));

Åtgärda med ytlig likhet

Importera `shallow` från zustand och skicka den som likhetsfunktion för att undvika omrenderingar när objektens innehåll är detsamma.
import { shallow } from 'zustand/shallow';

const info = useAppStore(
  s => ({ id: s.id, name: s.name }),
  shallow // compare by content, not reference
);

Välja flera värden

Använd mönstret med ytlig likhet för att välja flera värden samtidigt utan att skapa onödiga omrenderingar.
const { items, loading } = useCartStore(
  s => ({ items: s.items, loading: s.loading }),
  shallow
);

Stabila action-referenser

Actions, alltså funktioner, i Zustand har stabila referenser — de ändras inte när state uppdateras. Ni kan välja dem utan shallow, och de orsakar då inga omrenderingar.
// Actions are always stable — no shallow needed
const addToCart = useCartStore(s => s.addToCart);

Hjälpfunktionen useShallow (Zustand v5+)

Zustand v5 tillhandahåller verktyget useShallow, som automatiskt omsluter selectorn med ytlig likhet och gör koden renare.
import { useShallow } from 'zustand/react/shallow';

const { items, loading } = useCartStore(
  useShallow(s => ({ items: s.items, loading: s.loading }))
);

Kombinera selectors

Härled beräknade värden i selectors för att slippa lagra härlett state i storet. Beräkna summor, filtrerade listor eller formaterade strängar i selectorn.
const totalPrice = useCartStore(
  s => s.items.reduce((sum, item) => sum + item.price, 0)
);

Profilera omrenderingar i Zustand

Använd React DevTools Profiler för att kontrollera att era selectors fungerar. När ni har lagt till en orelaterad post i storet kontrollerar ni att komponenten som endast använder name-selectorn INTE visas i commitens flame graph.

Snabb kontroll

Varför behöver ni använda ytlig likhet när en Zustand-selector returnerar ett objekt?

Sammanfattning

Använd alltid specifika selectors. Använd ytlig likhet när ni väljer flera värden som ett objekt. Härled beräknade värden i selectors. Actions har stabila referenser och behöver inte shallow.

Nästa steg

Nästa lektion: **Beständig state med persist-middleware** — ni kommer att synkronisera Zustand-state med localStorage med hjälp av persist-middleware.
Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Selectors och förhindra onödiga omrenderingar” gratis?

Ja – hela texten till ”Selectors och förhindra onödiga omrenderingar” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Selectors och förhindra onödiga omrenderingar”?

Extrahera specifika state-delar via selectors så att komponenter endast renderas om vid behov. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Selectors och förhindra onödiga omrenderingar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Skapa din första Zustand-store
  2. Selectors och förhindra onödiga omrenderingar
  3. Beständiggöra state med persist-middleware
  4. Zustand DevTools och testning av stores
← Tillbaka till React Academy