Ronaiza Cardoso

13 juli 2026

Min läsning

React Hooks vs Redux: När du bör använda vad

Valet mellan React hooks och Redux handlar om omfattning, inte om kvalitet. Använd React hooks för tillstånd som hör hemma i en komponent, samt för mindre delade värden som tema eller språkinställningar. Vänd dig till Redux när flera orelaterade funktioner förlitar sig på samma data, när fler än fem utvecklare arbetar i kodbasen, eller när du behöver en spårbar historik över varje ändring. De flesta produktionsappar använder i slutändan båda, fast på olika nivåer.

Se tillstånd som vatten i en byggnad. Hooks är kranarna i varje rum, nära där vattnet används. Redux är huvudledningen, tryckventilerna och mätaren som talar om exakt vem som tappade upp ett bad klockan tre på natten.

Samma substans. Helt olika uppgifter. Det är hela argumentet, och allt nedan är uträkningen.

Vad kostar ett dåligt beslut kring tillståndshantering egentligen?

Arkitektur för tillståndshantering är ett av få val inom frontend som får kumulativ effekt. Väljer du för lite struktur får du betala i form av längre introduktionstid för nyanställda och buggar som ingen kan återskapa. Väljer du för mycket får du betala i form av boilerplate-kod som ingen bett om.

Det intressanta är asymmetrin. Att överarbeta en lösning kostar några bortkastade veckor, och det märks direkt. Att underarbeta den kostar kvartal av smygande hastighetsförlust, och det märker du först när teamet har vuxit förbi punkten där en omskrivning är billig.

Det här är alltså en fråga för CTO:n, förklädd till en preferens för utvecklare. Vi har ramat in varje tekniskt avsnitt nedan utifrån den leveransrisk det innebär, eftersom det är den delen som påverkar din roadmap.

blå pil till vänster
Imaginary Cloud-logotyp

Vad är React-hooks?

React-hooks är sättet du hanterar tillstånd och livscykel i funktionskomponenter, utan klasser. De introducerades i React 16.8 och skapades för att minska komponenternas komplexitet genom att göra logik återanvändbar.

Den verkliga vinsten är anpassade hooks. Bryt ut beteenden som du använder på flera ställen och slipp skriva samma kod två gånger.

// useDebouncedValue.js
import { useEffect, useState } from 'react';

export function useDebouncedValue(value, delay = 300) {
  const [debounced, setDebounced] = useState(value);

  useEffect(() => {
    const timer = setTimeout(() => setDebounced(value), delay);
    return () => clearTimeout(timer);
  }, [value, delay]);

  return debounced;
}

Haken är att hooks inte ställer några krav på struktur. Var delat tillstånd ska ligga blir en bedömningsfråga för varje enskild utvecklare, och verktygen ger ingen vägledning. Det fungerar utmärkt med två utvecklare, men blir kostsamt med tio.

blå pil till vänster
Imaginary Cloud-logotyp

Vad är Redux?

Redux är ett bibliotek för att hantera globalt applikationstillstånd. En lagringsplats, ett strukturerat sätt att ändra den, och verktyg som övervakar varje ändring i realtid.

Den officiella dokumentationen anger tre principer:

  1. En enda källa till sanning. Det globala tillståndet finns i ett enda objekttryck, inuti en lagringsplats.
  2. Tillståndet är skrivskyddat. Det enda sättet att ändra det är genom att skicka en åtgärd.
  3. Ändringar görs med rena funktioner. Reducerare beskriver hur tillståndet transformeras, och inget annat.

Redux levereras även med sina egna hooks, useSelector och useDispatch, så att funktionskomponenter kan läsa från lagringsplatsen utan klassbaserad koppling. (Detta är react-redux-bindningen, och ja, du behöver den: mer om det i FAQ:n.)

Vad ceremonin ger dig:

  • Selektorbaserade prenumerationer. En komponent prenumererar på den del av tillståndet den faktiskt använder. Ändra varukorgen, och notisflödet förblir helt opåverkat.
  • Redux DevTools. Tidsresande felsökning och en läsbar logg över varje åtgärd. I praktiken är det skillnaden mellan att diagnostisera en incident i produktion på en timme och att spendera en hel dag med att återskapa tillståndet genom att läsa kod.
  • En serialiserbar ögonblicksbild av hela applikationens tillstånd, precis när du vill.

Kostnaden: installationstid, boilerplate-kod och en inlärningskurva för alla som är nya inför det. Redux Toolkit minskar alla tre avsevärt, och det är det officiellt rekommenderade sättet att skriva Redux på idag.

blå pil till vänster
Imaginary Cloud-logotyp

Vad är Redux?

Redux är ett bibliotek för att hantera globalt applikationstillstånd. I detta bibliotek finns flera verktyg som hjälper oss utvecklare att hålla koll på applikationens tillstånd och även transformera det genom att ge användaren möjlighet att skicka åtgärder.

Reduxkan, enligt dokumentationen, beskrivas utifrån tre grundläggande principer:

  1. En enda källa till sanning: det globala tillståndet för din applikation lagras i ett objektträd i en enda undefined.‍
  2. Tillståndet är skrivskyddat: Det enda sättet att ändra undefined är genom att skicka åtgärder.‍
  3. Ändringar görs med rena funktioner: För att uppdatera undefined bör reduceraren skrivas som en ren funktion.‍

Redux uppdaterade till och med biblioteket med sina anpassade hooks. Dessa kan användas för att integrera komponenter som använder React Hooks funktioner för att hämta data från store och skicka actions utan att behöva förlita sig på komponentklasser.

Nu när vi är lite mer bekanta med Redux och React Hooks ska vi titta på skillnaden mellan dem.

blå pil till vänster
Imaginary Cloud-logotyp

Vad betyder egentligen jargongen?

De flesta artiklar om detta ämne utgår från att du redan kan språket. Det antagandet är precis varför ämnet förblir otydligt, så här är vokabulären på vanlig svenska.

State är all data som ändras över tid och påverkar vad användaren ser. Ett formulärfält. En inloggad användare. En varukorg.

En reducer är en funktion som tar det nuvarande tillståndet och en åtgärd, och sedan returnerar ett nytt tillstånd utan att röra det ursprungliga. Den gör varje ändring explicit och spårbar.

En ren funktion ger alltid samma utdata för samma indata och ändrar ingenting utanför sig själv. Inga nätverksanrop, ingen skrivning till variabler på andra ställen. Reducers måste vara rena, eftersom det är det som gör tillståndsändringar reproducerbara och testbara.

Att skicka (eller dispatcha) en åtgärd innebär att beskriva en ändring som ett enkelt objekt istället för att bara utföra den. Du muterar inte varukorgen. Du skickar { type: 'basket/itemAdded', payload: item } och låter reducern räkna ut resultatet.

Provider och consumer är de två halvorna av Reacts Context API. Providern håller ett värde och erbjuder det till allt nedanför i trädet. Consumern är vilken komponent som helst som läser det.

En selector är en liten funktion som plockar ut en del av storen, som state => state.basket.total. Selector-baserad prenumeration innebär att en komponent bara ritas om när dess del ändras.

Blast radius är den uppsättning komponenter som en enskild tillståndsändring tvingar att ritas om. Liten är bra.

En thunk är en funktion som du skickar iväg istället för en vanlig action, så att du kan köra asynkront arbete (oftast ett API-anrop) innan du skickar iväg den riktiga.

RTK Query är lagret för datahämtning och cachning som ingår i Redux Toolkit. Det hanterar serverdata så att du slipper hantera den manuellt i din store.

blå pil till vänster
Imaginary Cloud-logotyp

Varför fallerar Context API i större skala?

Context skapades för värden som sällan ändras. Det saknar helt en väljarmekanism. När ett värde i en provider ändras, renderas därför alla underliggande konsumenter om, även de komponenter som inte ens använder den del som ändrades.

Låt oss återgå till VVS-liknelsen. Context är ett enda stort rör som försörjer hela byggnaden. Vrid på en kran på tredje våningen och hela huset skakar.

För en temaväxlare spelar det ingen roll. Men för en kontext som hanterar den aktuella användaren, en kundvagn, ett live-flöde med notiser och en filterpanel, är det en katastrof. Ett enda tangenttryck i filterfältet gör att hela notislistan renderas om.

Team upptäcker oftast detta tre månader före lansering, när alla tillfälliga lösningar har börjat hopa sig. Och det är dessa lösningar som är den verkliga kostnaden: att dela upp en kontext i sex, memoise-a provider-värden, och att kapsla in konsumenter i React.memo, samt att bygga om trädet för att minska skadeverkningarna.

Varje åtgärd är försvarbar var för sig. Tillsammans utgör de en skräddarsydd, odokumenterad tillståndshanterare som bara en enda utvecklare förstår, och som kostar mer att underhålla än det bibliotek man försökte undvika från början. Det är en välkänd väg mot teknisk skuld.

Redux undviker detta genom sin design. Tack vare selectors begränsas skadeverkningarna till det som komponenten faktiskt läser.

Banner graphic for Imaginary Cloud services. Text reads: "Build scalable products with Web & Mobile Development. We help you shape digital products from scratch or improve your existing ones." Includes a "LEARN MORE" button and isometric digital device illustration.
blå pil till vänster
Imaginary Cloud-logotyp

useReducer hör hemma i komponenter med komplex intern logik. Ett formulär i flera steg. En guide. En datatabell som hanterar sortering, filtrering och paginering. Där useState lämnar dig med fem ömsesidigt beroende setter-funktioner, ger en reducer dig en enda sammanhängande övergångsfunktion.

const initialState = { status: 'idle', items: [], error: null };

function feedReducer(state, action) {
  switch (action.type) {
    case 'FETCH_STARTED':
      return { ...state, status: 'loading', error: null };
    case 'FETCH_SUCCEEDED':
      return { status: 'ready', items: action.payload, error: null };
    case 'FETCH_FAILED':
      return { ...state, status: 'error', error: action.payload };
    default:
      return state;
  }
}

const [state, dispatch] = useReducer(feedReducer, initialState);

Den tar emot din reducer och det initiala tillståndet, och returnerar det aktuella tillståndet samt en dispatch -funktion. Skriv aldrig direkt till tillståndet. Skicka en action, alltid formad som ett objekt med en type (vad som hände) och en payload (datan som ändringen kräver).

Så kan useReducer ersätta Redux? På komponentnivå uppstår frågan aldrig riktigt, eftersom det helt enkelt är rätt verktyg för jobbet.

Om du däremot lyfter upp det till globalt tillstånd via context, får du det mesta av Redux struktur utan dess infrastruktur. Du kommer att märka att du bygger om väljarbaserade prenumerationer, middleware för asynkront arbete och felsökningsverktyg. Från grunden. En tisdag, mitt i en sprint som var tänkt att handla om produkten.

Det ombygget är inte gratis, och det finns inte med i någons tidsplan. Gränsdragningen handlar om omfattning, inte komplexitet.

blå pil till vänster
Imaginary Cloud-logotyp

React hooks vs Redux vs Zustand: det verkliga beslutet 2026

Sanningen är att för de flesta nya projekt är den ärliga jämförelsen inte längre en ren tvåvägskamp. Zustand har blivit den självklara utmanaren, och att låtsas som något annat ger dig ett falskt val.

Zustand är en minimalistisk store. Du skapar ett tillstånd och använder det via en hook. Ingen provider, knappt någon boilerplate och, avgörande nog, väljarbaserade prenumerationer direkt från start – vilket är den enda sak som vanlig context inte kan erbjuda.

Enligt State of React 2025-undersökningen, är Redux och Redux Toolkit fortfarande de mest spridda lösningarna för tillståndshantering, men Zustand vinner mark snabbt och leder kategorin när det gäller användarnöjdhet – så pass mycket att undersökningens författare kallar det för kategoriledare. Samma undersökning noterar att en stor andel av respondenterna inte använder något bibliotek för tillståndshantering alls, eftersom useState och useContext fungerar alldeles utmärkt för det de bygger.

Se det som ett beslut, inte en trend:

  • Endast hooks. Snabbast tid till värde. Fungerar utmärkt ända tills det delade tillståndet omfattar tre eller fyra ansvarsområden.
  • Zustand. Löser problemet med omrenderingar i context med nästan noll startsträcka. Det pragmatiska valet för små och medelstora team som vuxit ur context men inte behöver en granskningslogg.
  • Redux Toolkit. Rätt val när själva strukturen är det som ska levereras. Stora team, reglerade branscher och alla situationer där tillståndsändringar måste kunna spåras för regelefterlevnad.

En viktig brasklapp, och det är den stora. Mycket av det som team vänder sig till en store för att lösa är server-state, det vill säga cachade API-svar. Det hör hemma i TanStack Query eller SWR, inte i någon klient-store. Sortera ut det först, så blir det återstående beslutet oftast mycket enklare.

blå pil till vänster
Imaginary Cloud-logotyp

Matrisen för det imaginära molntillståndet

De flesta jämförelser rycker på axlarna och säger "det beror på". Här är vad vi faktiskt använder när vi granskar eller påbörjar en React-kodbas. Två axlar: applikationskomplexitet, vilket innebär hur många funktioner som delar samma data, och teamstorlek, vilket innebär hur många utvecklare som ändrar den datan.

Matrix by Imaginary Cloud mapping React Hooks, Zustand, and Redux Toolkit by project complexity and team size.

Samma fyra regler, i textform, eftersom bilder fungerar dåligt:

  1. En till fyra utvecklare, få funktioner som delar data: använd endast React-hooks. Ett tillståndsbibliotek här är överarbetat, och du betalar för det i form av onödigt konfigurationsarbete.
  2. Fem eller fler utvecklare, enkel applikation: behåll hooks, men skriv ner var delat tillstånd lagras. Din risk är att konventionerna glider isär, inte prestandan.
  3. Litet team, många funktioner som delar data: använd Zustand. Du behöver väljarbaserade prenumerationer, inte organisatorisk ställningsbyggnad.
  4. Fem eller fler utvecklare, många funktioner som delar data: använd Redux Toolkit. Struktur, granskningsspår och snabbare introduktion av nya medarbetare är värda varje rad boilerplate-kod.

Och här är det som förvånar folk. Teamstorlek, inte applikationskomplexitet, är den starkare indikatorn. En genuint komplex app som underhålls av två utvecklare som delar en mental modell körs utmärkt med hooks. En bara småkrånglig app som underhålls av nio utvecklare i tre team gör det inte, och inte för att koden inte kan uttrycka det. Utan för att nio personer inte kan hålla en odokumenterad konvention i huvudet samtidigt.

Vad händer när du skalar från två utvecklare till tio?

Föreställ dig en produkt som växer från två utvecklare till tio under ett par kvartal.

Vid två är hooks-only optimalt. Delat tillstånd ligger i tre kontexter, konventionerna är oskrivna eftersom båda utvecklarna skapade dem, och leveranstakten är hög. Redux skulle bara vara en belastning.

Vid tio vänder sig samma arkitektur mot dig. Introduktionstiden sträcker sig från dagar till veckor, eftersom det inte finns något kanoniskt svar på "var bor den här datan", bara prejudikat.

Två utvecklare löser samma problem med omrenderingar oberoende av varandra, på inkompatibla sätt.

Att felsöka en incident i produktion innebär att återskapa tillståndet genom att läsa kod, eftersom det saknas en händelselogg. Utvecklingstakten sjunker, utan att det beror på ett enskilt beslut.

Avvägningen handlar alltså inte om boilerplate kontra elegans. Det handlar om en kostnad som betalas i förskott kontra en kostnad som betalas i stor skala, med ränta.

Misslyckandet går åt båda hållen, förstås. Att införa Redux för en MVP med två utvecklare är en reell kostnad utan avkastning. Det du ska hålla utkik efter är inte antalet kodrader. Det är dagen då ditt team inte längre kan svara på "varför renderades detta om" utan att behöva öppna en debugger.

blå pil till vänster
Imaginary Cloud-logotyp

Hur migrerar man från Redux till hooks (eller Zustand)?

Den omvända migreringen blir allt vanligare, oftast när det visar sig att Redux-storen mest består av cachad serverdata i förklädnad.

  1. Inventera vad storen faktiskt innehåller. I de flesta kodbaser vi tar över utgörs huvuddelen av serverstate: API-svar, cachade listor och pagineringspekare. Det är inte klientstate, och Redux var aldrig rätt plats för det.
  2. Flytta serverstate till ett frågebibliotek. TanStack Query eller SWR hanterar cachning, omvalidering och bakgrundsuppdateringar. Storen krymper dramatiskt.
  3. Utvärdera vad som finns kvar. Autentisering, tema, feature flags och ett fåtal UI-relaterade saker. Ofta tillräckligt smått för context plus useReducer, eller en enda Zustand-store.
  4. Migrera del för del. Redux och React hooks fungerar utmärkt tillsammans. Det behövs ingen stor "big bang"-övergång, och det bör man inte heller göra.

Team upptäcker ofta att steg 2 löser hela diskussionen på egen hand. Problemet var aldrig Redux. Problemet var att använda en hanterare för klientstate som en nätverkscache.

React hooks vs Redux vs Zustand: en jämförelse

FunktionReact hooks (Context + useReducer)ZustandRedux (Redux Toolkit)
Tillståndsomfång (State scope)Komponentlokalt eller avgränsade delade delarGlobal, lättviktig storeGlobal, enda källan till sanning (single source of truth)
Verktyg (Tooling)React DevTools, ingen åtgärdshistorikFungerar med Redux DevTools via middlewareRedux DevTools, tidsresor (time-travel), fullständig åtgärdslogg
Mängd kod (Boilerplate)MinimalMinimalMåttlig, avsevärt reducerad av Redux Toolkit
Kontroll över omrenderingarManuell: memoise-hantering, uppdelning av contextInbyggd, via selektorerInbyggd, via selektorer
Asynkron hanteringBygg en egen lösning eller lägg till ett query-bibliotekLägg till ett query-bibliotekThunks, middleware, RTK Query
Introduktionskostnad (Onboarding)Låg om konventioner är dokumenterade, hög om de inte är detLågHögre inledningsvis, lägre per ytterligare utvecklare
Idealisk teamstorlek1 till 4 utvecklare1 till 8 utvecklare5+ utvecklare, eller reglerade domäner
Idealisk applikationMVP:er, marknadsföringswebbplatser, fokuserade produkterMellanstora produkter med delat UI-tillståndPlattformar med flera funktioner, granskningsbara domäner

Vill du se helheten? Vår guide till tillståndshantering i React täcker hela landskapet, och våra artiklar om att välja teknikstack och asynkrona JavaScript-mönster täcker områdena runtomkring.

blå pil till vänster
Imaginary Cloud-logotyp

Vanliga frågor

Vad betyder Redux?

Redux är ett bibliotek med öppen källkod för att hantera globalt applikationstillstånd i JavaScript-appar, oftast React-appar. Det håller delat tillstånd i ett enda objekt som kallas store, och ändrar det endast genom skickade händelser (actions) som hanteras av rena funktioner som kallas reducers. Namnet avslöjar innebörden: tillståndsändringar reduceras till ett förutsägbart flöde.

Bör jag använda Redux eller React-hooks?

Använd hooks för lokalt komponenttillstånd och mindre delade värden som tema eller språkinställningar. Välj Redux när flera funktioner är beroende av samma data, när fler än fem utvecklare arbetar i kodbasen, eller när du behöver en logg över tillståndsändringar. I de flesta produktionsapplikationer är svaret båda, på olika nivåer.

React-hooks vs Redux vs Zustand: vad ska jag välja?

Börja med hooks. Gå över till Zustand när delat tillstånd växer ur context och du börjar kämpa med onödiga omrenderingar. Byt till Redux Toolkit när teamet växer till ungefär fem utvecklare, eller när domänen kräver spårbara tillståndsändringar. Zustand leder just nu kategorin när det gäller utvecklarnöjdhet, medan Redux förblir den mest använda lösningen.

Är Redux fortfarande relevant 2026?

Ja. Men inte som det självklara förstahandsvalet. Undersökningen State of React 2025 visar att Redux och Redux Toolkit fortfarande är de mest spridda lösningarna, och de förblir det starkaste alternativet för stora team och reglerade branscher. För ett nytt projekt med ett litet team är Zustand, eller inget bibliotek alls, numera den vanligare startpunkten.

När bör jag använda useReducer istället för Redux?

Använd useReducer när komplex tillståndshantering är begränsad till en enskild komponent eller en tät grupp: ett formulär i flera steg, en guide eller ett datagrid. Använd Redux när tillståndet delas av orelaterade delar av applikationen. Det är omfattningen, inte komplexiteten, som avgör.

Kan React-hooks ersätta Redux helt?

För små och medelstora applikationer, ja. useContext och useReducer återskapar tillsammans det mesta av vad Redux gör. Det de inte kan ersätta utan omfattande anpassningar är väljarbaserad kontroll av omrenderingar, middleware för asynkron logik och felsökningsupplevelsen i DevTools. Vilket är precis vad stora team förlitar sig på.

Vad är react-redux och hur skiljer det sig från Redux?

Redux är ramverksoberoende, en tillståndsbehållare som fungerar med vilket UI-lager som helst. react-redux är den officiella bryggan som kopplar samman det med React och ger dig useSelector och useDispatch -hooks. Du behöver båda för att använda Redux i en React-applikation.

Orsakar Context API prestandaproblem?

Det kan det göra. Context saknar en väljarmekanism, så när en providers värde ändras renderas alla konsumenter under den om, även de som aldrig använde den ändrade delen. Det fungerar bra för värden som sällan ändras, men blir problematiskt för allt som ändras ofta eller används på många ställen.

Slutsatsen: båda, medvetet

Så är Redux dött? Nej, självklart inte. React hooks och Redux är komplement, inte rivaler. Hooks hanterar komponenttillstånd och delbar logik, Redux hanterar globalt tillstånd, skickade händelser och den observerbarhet som stora team är beroende av, och Zustand har nu hittat sin naturliga plats däremellan.

Tillbaka till byggnadsliknelsen en sista gång. Du väljer inte mellan kranen och huvudledningen. Du räknar ut hur många rum som behöver vatten, hur många som vrider på kranarna, och drar rören därefter.

Var på komplexitetsskalan befinner sig din applikation, var på storleksskalan befinner sig ditt team, och var kommer båda att befinna sig om tolv månader? Arkitektera för det. Inte för idag.

Om du bygger eller skalar en React-applikation och vill ha ett rakt svar gällande din tillståndsarkitektur innan den låser sig, så genomför vårt team tekniska revisioner som gör precis det.

Ronaiza Cardoso
Ronaiza Cardoso

Javascript-utvecklare sedan 2016 har jag byggt mobilappar med Ionic och React Native. Gitarrspelare och matlagningsälskare.

Läs fler inlägg av denna författare

People who read this post, also found these interesting:

Dropdown caret icon