UseReducer Hook är ett av de bästa alternativen för tillståndshantering i React. Kickstarta din resa med useReducer Hook med hjälp av den här guiden.

Statlig förvaltning är avgörande i React-utvecklingen och fungerar som en hörnsten för hantering och uppdatering av data i användargränssnitt. Reageras useState Hook ger ett enkelt tillvägagångssätt för att hantera tillstånd, men det blir besvärligt med komplexa tillstånd. Det är där användReducer Hook kommer in.

De användReducer Hook erbjuder en strukturerad metod för att hantera komplexa tillstånd och övergångar. Att omfamna användReducer Krok låser upp flexibilitet och effektivitet, vilket leder till renare kod.

Förstå användningen Reducer Hook

De användReducer Hook är en inbyggd funktion från React som effektiviserar tillståndshanteringen genom att följa principerna för reduceringsmönstret. Det erbjuder dig ett organiserat och skalbart alternativ till useState Krok, speciellt lämpad för hantering av komplexa tillstånd.

Genom att utnyttja

användReducer Hook, du kan konsolidera både tillståndet och dess övergångar inom en enda reducerfunktion.

Denna funktion tar det aktuella tillståndet och en åtgärd som indata, och producerar sedan det nya tillståndet. Den fungerar enligt samma principer som reduceringsfunktionen som används i JavaScript Array.prototype.reduce() metod.

Syntax och exempel Användning av useReducer Hook

Syntaxen för att använda användReducer Kroken är som följer:

konst [tillstånd, sändning] = useReducer (reducer, initialState);

De användReducer funktion accepterar två argument:

  • reducerare (funktion): Bestämmer det sätt på vilket tillståndet ska uppdateras baserat på det aktuella läget och den skickade åtgärden.
  • initialState (valfri): Representerar det initiala tillståndsvärdet för komponenten.

Vid anrop, den användReducer Hook returnerar en array som består av två element:

  • stat (någon som helst): Anger det aktuella tillståndsvärdet.
  • utskick (funktion): Denna funktion gör det möjligt att skicka åtgärder för att uppdatera tillståndet.

Betrakta exemplet nedan som illustrerar användningen av användReducer Haka på att hantera en enkel räknare:

importera Reagera, { useReducer } från'reagera';
konst initialState = 0;

konst reducering = (stat, handling) => {
växla (action.type) {
fall'ökning':
lämna tillbaka ange + 1;
fall'minskning':
lämna tillbaka stat - 1;
standard:
lämna tillbaka stat;
}
};

konst Räknare = () => {
konst [count, dispatch] = useReducer (reducer, initialState);
konst handleIncrement = () => {
avsändande({ typ: 'ökning' });
};

konst handleDecrement = () => {
avsändande({ typ: 'minskning' });
};

lämna tillbaka (


};

Från ovanstående illustration, ett initialt tillstånd av 0 definieras tillsammans med en reducerfunktion som ansvarar för att hantera två typer av åtgärder: ökning och minskning. Reduktionsfunktionen modifierar tillståndet i enlighet med de specificerade åtgärderna.

Genom att utnyttja användReducer Hook, tillståndet initieras och både det aktuella tillståndsvärdet och sändningsfunktionen inhämtas. Utskickningsfunktionen används därefter för att utlösa tillståndsuppdateringar när du klickar på respektive knapp.

Konstruera en reduceringsfunktion

För optimalt utnyttjande av användReducer Hook, du kan skapa en reducerfunktion som beskriver hur tillståndet ska uppdateras baserat på de skickade åtgärderna. Denna reducerfunktion accepterar det aktuella tillståndet och åtgärden som argument och returnerar det nya tillståndet.

Vanligtvis en reducerfunktion använder ett switchvillkorligt uttalande att hantera olika åtgärdstyper och genomföra tillståndsändringar i enlighet därmed.

Betrakta exemplet nedan på en reduceringsfunktion som används för att hantera en att göra-lista:

konst initialState = [];

konst reducering = (stat, handling) => {
växla (action.type) {
fall'Lägg till':
lämna tillbaka [...stat, handling.nyttolast];
fall"växla":
lämna tillbaka state.map((att göra) =>
todo.id action.payload? { ...att göra, avslutad: !todo.completed }: todo
);
fall'radera':
lämna tillbaka state.filter((att göra) => todo.id !== action.payload);
standard:
lämna tillbaka stat;
}
};

I ovanstående fall hanterar reducerfunktionen tre distinkta åtgärdstyper: Lägg till, växla, och radera. Vid mottagande av Lägg till åtgärd, lägger den till nyttolasten (ett nytt att göra-objekt) till stat array.

I fallet med växla handling, alternerar den avslutad egenskapen för att göra-objektet som är kopplat till det angivna ID: t. De radera action, å andra sidan, eliminerar att göra-objektet som är kopplat till det angivna ID: t från tillståndsarrayen.

Skulle ingen av åtgärdstyperna överensstämma, returnerar reduceringsfunktionen det aktuella tillståndet oförändrat.

Utsändningsåtgärder

För att genomföra statliga uppdateringar som underlättas av användReducer Hook, utsändandet av åtgärder blir oumbärligt. Åtgärder representerar vanliga JavaScript-objekt som belyser den önskade typen av tillståndsändring.

Ansvaret för att hantera dessa åtgärder och generera det efterföljande tillståndet ligger på reducerfunktionen.

Utsändningsfunktionen, tillhandahållen av användReducer Hook, används för att skicka åtgärder. Den accepterar ett åtgärdsobjekt som ett argument, vilket leder till den relevanta tillståndsuppdateringen.

I de föregående exemplen skickades åtgärder med syntaxen dispatch({typ: 'actionType'}). Det är dock tänkbart att åtgärder omfattar kompletterande data, så kallade nyttolast, som ger ytterligare insikter om uppdateringen. Till exempel:

avsändande({ typ: 'Lägg till', nyttolast: { id: 1, text: "Avsluta läxor", avslutad: falsk } });

I det här scenariot Lägg till åtgärden inkluderar ett nyttolastobjekt som kapslar in detaljerna för det nya att göra-objektet som ska införlivas i staten.

Hantera komplexa tillstånd med useReducer

Den verkliga styrkan hos användReducer Hook ligger i dess förmåga att hantera intrikata tillståndsstrukturer, som omfattar många sammanlänkade värden och intrikata tillståndsövergångar.

Genom att centralisera statslogiken i en reducerfunktion blir hanteringen av olika åtgärdstyper och den systematiska uppdateringen av staten en genomförbar strävan.

Tänk på ett scenario där a reaktionsformuläret består av flera inmatningsfält. Snarare än att hantera varje ingångs tillstånd individuellt genom useState, den användReducer Hook kan användas för att holistiskt hantera formtillståndet.

Reduceringsfunktionen kan på ett skickligt sätt hantera åtgärder som är relevanta för modifiering av specifika fält och den omfattande valideringen av hela formuläret.

konst initialState = {
namn: '',
e-post: '',
Lösenord: '',
isFormValid: falsk,
};

konst reducering = (stat, handling) => {
växla (action.type) {
fall'updateField':
lämna tillbaka { ...tillstånd, [action.payload.field]: action.payload.value };
fall'validateForm':
lämna tillbaka { ...stat, isFormValid: action.payload };
standard:
lämna tillbaka stat;
}
};

I exemplet tillgodoser reduceringsfunktionen två distinkta åtgärdstyper: updateField och valideraForm. De updateField åtgärden underlättar modifieringen av ett specifikt fält inom staten genom att använda det angivna värdet.

Omvänt, den valideraForm action uppdaterar isFormValid egendom baserat på det angivna valideringsresultatet.

Genom att anställa användReducer Hook för att hantera formulärtillståndet, alla associerade tillstånd och åtgärder konsolideras i en enda enhet, vilket gör det lättare att förstå och underhålla.

Jämför useReducer med andra statliga hanteringslösningar

Även om användReducer Hook står som ett potent verktyg för statlig förvaltning, det är viktigt att erkänna dess olikheter och avvägningar jämfört med alternativa statliga förvaltningslösningar inom Reacts ekosystem.

useState

De useState Hook räcker för att hantera enkla, isolerade tillstånd inom en komponent. Dess syntax är mer kortfattad och okomplicerad i jämförelse med användReducer. Icke desto mindre, för invecklade tillstånds- eller tillståndsövergångar, användReducer ger ett mer organiserat tillvägagångssätt.

på nytt

Redux representerar ett framstående statligt ledningsbibliotek för React-applikationer. Den följer ett liknande reducermönster som användReducer, men tillhandahåller ytterligare funktioner som en centraliserad butik, mellanvarustöd och felsökning av tidsresor.

Redux visar sig vara idealisk för storskaliga applikationer som kräver komplexa tillståndshanteringskrav. Men för mindre projekt eller enklare statliga ledningsbehov, användReducer kan fungera som ett lätt och enklare alternativ.

Context API

Reacts Context API möjliggör delning av tillstånd över flera komponenter utan att tillgripa propborrning. I samband med användReducer, kan det ge en centraliserad tillståndshanteringslösning.

Medan kombinationen av Context API och användReducer ståtar med avsevärd kraft, kan den introducera ytterligare komplexitet när den ställs intill användningen av useReducer isolerat.

Context API används bäst när det finns ett behov av att dela tillstånd bland djupt kapslade komponenter eller när de konfronteras med en komplex komponenthierarki. Valet av en lämplig tillståndshanteringslösning beror på de specifika kraven för den aktuella applikationen.

För projekt av måttlig storlek, användReducer kan visa sig vara ett effektivt och enklare alternativ till Redux eller Context API.

Släpp lös enkelheten i statlig förvaltning

UseReducer Hook står som ett potent instrument för att förenkla tillståndshantering inom React-applikationer. Genom att följa principerna för reduceringsmönstret erbjuder det ett strukturerat och skalbart tillvägagångssätt för att hantera komplexa tillstånds- och tillståndsövergångar.

När den används tillsammans med useState Hook, kan useReducer fungera som ett lättviktigt alternativ till bibliotek som Redux eller Context API, särskilt i samband med mindre till medelstora projekt.