UseReducer Hook er en af ​​de bedste muligheder for statsstyring i React. Kickstart din rejse med useReducer Hook ved hjælp af denne guide.

Statsledelse er afgørende i React-udvikling, der fungerer som en hjørnesten for håndtering og opdatering af data i brugergrænseflader. Reager useState Hook giver en ligetil tilgang til at styre tilstand, men det bliver besværligt med kompleks tilstand. Det er her brug Reducer Krog kommer ind.

Det brug Reducer Hook tilbyder en struktureret metode til styring af komplekse tilstande og overgange. Omfavner brug Reducer Krog låser op for fleksibilitet og effektivitet, hvilket fører til renere kode.

Forståelse af brugen Reducer Hook

Det brug Reducer Hook er en indbygget funktion leveret af React, der strømliner tilstandsstyring ved at overholde principperne for reduktionsmønsteret. Det giver dig et organiseret og skalerbart alternativ til useState Krog, specielt velegnet til håndtering af komplekse tilstande.

Ved at udnytte brug Reducer Hook, du kan konsolidere både tilstanden og dens overgange inden for en enkelt reduktionsfunktion.

instagram viewer

Denne funktion tager den aktuelle tilstand og en handling som input og producerer efterfølgende den nye tilstand. Det fungerer efter de samme principper som reduceringsfunktionen i JavaScript Array.prototype.reduce() metode.

Syntaks og eksempel Brug af useReducer Hook

Syntaksen for at bruge brug Reducer Krogen er som følger:

konst [tilstand, afsendelse] = useReducer (reducer, initialState);

Det brug Reducer funktion accepterer to argumenter:

  • reducering (funktion): Bestemmer måden, hvorpå tilstanden skal opdateres baseret på den aktuelle tilstand og den afsendte handling.
  • initialState (enhver): Repræsenterer den oprindelige tilstandsværdi for komponenten.

Ved påkaldelse vil den brug Reducer Hook returnerer en matrix bestående af to elementer:

  • stat (enhver): Angiver den aktuelle tilstandsværdi.
  • afsendelse (funktion): Denne funktion gør det muligt at sende handlinger for at opdatere tilstanden.

Overvej nedenstående eksempel, der illustrerer brugen af brug Reducer Få styr på en simpel tæller:

importere Reager, { useReducer } fra'reagere';
konst initialState = 0;

konst reduktion = (tilstand, handling) => {
kontakt (action.type) {
sag'stigning':
Vend tilbage tilstand + 1;
sag'nedsætte':
Vend tilbage stat - 1;
Standard:
Vend tilbage stat;
}
};

konst Tæller = () => {
konst [tæller, afsendelse] = useReducer (reducer, initialState);
konst handleInkrement = () => {
afsendelse({ type: 'stigning' });
};

konst handleDecrement = () => {
afsendelse({ type: 'nedsætte' });
};

Vend tilbage (


};

Fra ovenstående illustration, en indledende tilstand af 0 er defineret sammen med en reduceringsfunktion, der er ansvarlig for håndtering af to typer handlinger: stigning og nedsættelse. Reduktionsfunktionen ændrer behørigt tilstanden i overensstemmelse med de specificerede handlinger.

Ved at udnytte brug Reducer Hook, tilstanden initialiseres, og både den aktuelle tilstandsværdi og afsendelsesfunktionen erhverves. Afsendelsesfunktionen bruges efterfølgende til at udløse tilstandsopdateringer ved at klikke på de respektive knapper.

Konstruktion af en reduktionsfunktion

For optimal udnyttelse af brug Reducer Hook, du kan oprette en reduceringsfunktion, der beskriver, hvordan tilstanden skal opdateres baseret på de afsendte handlinger. Denne reduceringsfunktion accepterer den aktuelle tilstand og handlingen som argumenter og returnerer den nye tilstand.

Typisk en reduktionsfunktion anvender en switch betinget erklæring at håndtere forskellige handlingstyper og effektuere tilstandsændringer i overensstemmelse hermed.

Overvej eksemplet nedenfor på en reduceringsfunktion, der bruges til at administrere en todo-liste:

konst initialState = [];

konst reduktion = (tilstand, handling) => {
kontakt (action.type) {
sag'tilføje':
Vend tilbage [...stat, handling.nyttelast];
sag'skift':
Vend tilbage state.map((at gøre) =>
todo.id action.payload? { ...at gøre, afsluttet: !todo.completed }: gøremål
);
sag'slet':
Vend tilbage state.filter((at gøre) => todo.id !== action.payload);
Standard:
Vend tilbage stat;
}
};

I ovenstående tilfælde håndterer reduktionsfunktionen tre forskellige handlingstyper: tilføje, skifte, og slette. Ved modtagelse af tilføje handling, tilføjer den nyttelasten (en ny opgavevare) til stat array.

I tilfælde af skifte handling, veksler den afsluttet egenskaben for opgaveelementet, der er knyttet til det angivne id. Det slette handling, på den anden side, eliminerer opgaveelementet, der er knyttet til det angivne ID, fra tilstandsarrayet.

Hvis ingen af ​​handlingstyperne stemmer overens, returnerer reduceringsfunktionen den aktuelle tilstand uændret.

Forsendelseshandlinger

For at gennemføre statsopdateringer lettet af brug Reducer Hook, udsendelse af handlinger bliver uundværlig. Handlinger repræsenterer almindelige JavaScript-objekter, der belyser den ønskede type tilstandsændring.

Ansvaret for at håndtere disse handlinger og generere den efterfølgende tilstand ligger hos reduktionsfunktionen.

Forsendelsesfunktionen, leveret af brug Reducer Hook, bruges til at sende handlinger. Den accepterer et handlingsobjekt som et argument, og anstifter derved den relevante tilstandsopdatering.

I de foregående eksempler blev handlinger sendt ved hjælp af syntaksen afsendelse({type: 'actionType'}). Det er dog tænkeligt, at handlinger omfatter supplerende data, kendt som nyttelast, som giver yderligere indsigt vedrørende opdateringen. For eksempel:

afsendelse({ type: 'tilføje', nyttelast: { id: 1, tekst: 'Afslut lektier', afsluttet: falsk } });

I dette scenarie vil tilføje handling inkluderer et nyttelastobjekt, der indkapsler detaljerne for den nye opgavevare, der skal inkorporeres i staten.

Håndtering af kompleks tilstand med useReducer

Den sande styrke brug Reducer Hook ligger i sin kapacitet til at styre indviklede tilstandsstrukturer, der omfatter adskillige indbyrdes forbundne værdier og indviklede tilstandsovergange.

Ved at centralisere statslogikken i en reduktionsfunktion bliver styringen af ​​forskellige handlingstyper og den systematiske opdatering af staten en gennemførlig bestræbelse.

Overvej et scenarie, hvor en reaktionsformen består af flere inputfelter. I stedet for at styre hver inputs tilstand individuelt igennem useState, det brug Reducer Hook kan bruges til holistisk at styre formtilstanden.

Reduktionsfunktionen kan dygtigt håndtere handlinger, der er relevante for ændringen af ​​specifikke felter og den omfattende validering af hele formularen.

konst initialState = {
navn: '',
e-mail: '',
adgangskode: '',
isFormValid: falsk,
};

konst reduktion = (tilstand, handling) => {
kontakt (action.type) {
sag'updateField':
Vend tilbage { ...state, [action.payload.field]: action.payload.value };
sag'validateForm':
Vend tilbage { ...stat, isFormValid: action.payload };
Standard:
Vend tilbage stat;
}
};

I eksemplet henvender reduktionsfunktionen sig til to forskellige handlingstyper: updateField og validerForm. Det updateField handling letter ændringen af ​​et specifikt felt i staten ved at bruge den angivne værdi.

Omvendt er validerForm handling opdaterer isFormValid egenskab baseret på det angivne valideringsresultat.

Ved at ansætte brug Reducer Hook for at administrere formulartilstanden, alle tilknyttede tilstande og handlinger konsolideres i en enkelt enhed, hvilket forbedrer forståelsen og vedligeholdelsen.

Sammenligning af useReducer med andre statsadministrationsløsninger

Selvom brug Reducer Hook står som et potent værktøj til statsforvaltning, det er vigtigt at anerkende dets uligheder og afvejninger sammenlignet med alternative statsforvaltningsløsninger inden for React-økosystemet.

useState

Det useState Hook er tilstrækkelig til at styre enkle, isolerede tilstande i en komponent. Dens syntaks er mere kortfattet og ligetil i forhold til brug Reducer. Ikke desto mindre, for indviklede tilstands- eller tilstandsovergange, brug Reducer giver en mere organiseret tilgang.

Redux

Redux repræsenterer et fremtrædende statsforvaltningsbibliotek til React-applikationer. Den overholder et lignende reduktionsmønster som brug Reducer, men leverer yderligere funktioner såsom en centraliseret butik, middleware-understøttelse og fejlretning af tidsrejser.

Redux viser sig at være ideel til applikationer i stor skala, der kræver komplekse tilstandsstyringskrav. Men for mindre projekter eller enklere statsforvaltningsbehov, brug Reducer kan tjene som et let og enklere alternativ.

Context API

Reacts Context API muliggør deling af tilstand på tværs af flere komponenter uden at ty til propboring. I forbindelse med brug Reducer, kan det give en centraliseret tilstandsstyringsløsning.

Mens kombinationen af ​​Context API og brug Reducer kan prale af betydelig kraft, kan det introducere yderligere kompleksitet, når det sidestilles med brugen af ​​useReducer isoleret.

Context API bruges bedst, når det er nødvendigt at dele tilstand midt i dybt indlejrede komponenter, eller når de konfronteres med et komplekst komponenthierarki. Valget af en passende tilstandsstyringsløsning afhænger af de specifikke krav til den aktuelle applikation.

For projekter af moderat størrelse, brug Reducer kan vise sig at være et effektivt og enklere alternativ til Redux eller Context API.

Frigør enkeltheden i statsforvaltningen

UseReducer Hook står som et potent instrument til at forenkle tilstandsstyring i React-applikationer. Ved at overholde principperne for reduktionsmønsteret tilbyder det en struktureret og skalerbar tilgang til håndtering af komplekse tilstands- og tilstandsovergange.

Når den bruges sammen med useState Hook, kan useReducer fungere som et letvægtsalternativ til biblioteker som Redux eller Context API, især i forbindelse med mindre til mellemstore projekter.