UseReducer Hook je ena najboljših možnosti za upravljanje stanja v Reactu. S tem priročnikom začnite svoje potovanje s kavljem useReducer Hook.

Upravljanje stanja je ključnega pomena pri razvoju Reacta, saj služi kot temelj za obdelavo in posodabljanje podatkov v uporabniških vmesnikih. React's useState Hook zagotavlja preprost pristop za upravljanje stanja, vendar postane okoren s kompleksnim stanjem. Tam je useReducer Hook vstopi.

The useReducer Hook ponuja strukturirano metodologijo za upravljanje kompleksnih stanj in prehodov. Objemanje useReducer Hook odklene prilagodljivost in učinkovitost, kar vodi do čistejše kode.

Razumevanje useReducer Hooka

The useReducer Hook je vgrajena funkcija, ki jo zagotavlja React in poenostavlja upravljanje stanja z upoštevanjem načel vzorca reduktorja. Ponuja vam organizirano in razširljivo alternativo useState Kavelj, posebej primeren za ravnanje s kompleksnimi stanji.

Z izkoriščanjem useReducer Hook, tako stanje kot njegove prehode lahko utrdite znotraj ene reduktorske funkcije.

instagram viewer

Ta funkcija vzame trenutno stanje in dejanje kot vhodne podatke, nato pa ustvari novo stanje. Deluje po enakih principih kot funkcija reduktorja, uporabljena v JavaScriptu Array.prototype.reduce() metoda.

Sintaksa in primer uporabe kljuke useReducer

Sintaksa za uporabo useReducer Hook je naslednji:

konst [stanje, odprema] = useReducer (reduktor, initialState);

The useReducer funkcija sprejme dva argumenta:

  • reduktor (funkcija): Določa način, na katerega naj se stanje posodobi glede na trenutno stanje in poslano dejanje.
  • initialState (poljubno): Predstavlja vrednost začetnega stanja za komponento.

Ob invokaciji je useReducer Hook vrne matriko, sestavljeno iz dveh elementov:

  • država (katera koli): Označuje trenutno vrednost stanja.
  • odprema (funkcija): Ta funkcija omogoča pošiljanje dejanj za posodobitev stanja.

Razmislite o spodnjem primeru, ki prikazuje uporabo useReducer Kavelj pri upravljanju preprostega števca:

uvoz Odziv, {useReducer} od'reagirati';
konst začetno stanje = 0;

konst reduktor = (stanje, dejanje) => {
stikalo (action.type) {
Ovitek'inkrement':
vrnitev stanje + 1;
Ovitek'dekrement':
vrnitev država - 1;
privzeto:
vrnitev država;
}
};

konst Števec = () => {
konst [count, dispatch] = useReducer (reducer, initialState);
konst handleIncrement = () => {
odprema({ vrsta: 'inkrement' });
};

konst handleDecrement = () => {
odprema({ vrsta: 'dekrement' });
};

vrnitev (


};

Iz zgornje ilustracije je začetno stanje 0 je definirana skupaj z reduktorsko funkcijo, ki je odgovorna za obravnavanje dveh vrst dejanj: prirastek in dekrement. Funkcija reduktorja ustrezno spremeni stanje v skladu z navedenimi dejanji.

Z izkoriščanjem useReducer Hook, stanje je inicializirano in pridobljeni sta vrednost trenutnega stanja in dispečerska funkcija. Funkcija pošiljanja se nato uporabi za sprožitev posodobitev stanja ob kliku ustreznih gumbov.

Konstruiranje reduktorske funkcije

Za optimalen izkoristek useReducer Hook, ustvarite lahko reduktorsko funkcijo, ki opisuje, kako naj se stanje posodobi na podlagi odposlanih dejanj. Ta reduktorska funkcija sprejme trenutno stanje in dejanje kot argumenta ter vrne novo stanje.

Običajno funkcija reduktorja uporablja pogojni stavek switch za obravnavo različnih vrst dejanj in ustrezno izvajanje sprememb stanja.

Oglejte si spodnji primer funkcije reduktorja, ki se uporablja za upravljanje seznama opravil:

konst začetniState = [];

konst reduktor = (stanje, dejanje) => {
stikalo (action.type) {
Ovitek'dodaj':
vrnitev [...stanje, action.payload];
Ovitek'preklop':
vrnitev state.map((narediti) =>
todo.id action.payload? { ...narediti, dokončana: !todo.completed }: opravilo
);
Ovitek'izbriši':
vrnitev stanje.filter((narediti) => todo.id !== action.payload);
privzeto:
vrnitev država;
}
};

V zgornjem primeru funkcija reduktorja obravnava tri različne vrste dejanj: dodati, preklop, in izbrisati. Ob prejemu dodati dejanje, doda koristni tovor (nov element opravila) v država niz.

V primeru preklop dejanje, se izmenjuje dokončana lastnost predmeta opravila, povezanega s podanim ID-jem. The izbrisati dejanje pa po drugi strani odstrani postavko opravila, povezano s podanim ID-jem, iz matrike stanja.

Če nobena od vrst dejanj ne ustreza, funkcija reduktorja vrne trenutno stanje nespremenjeno.

Odpremna dejanja

Za izvajanje posodobitev stanja, ki jih omogoča useReducer Hook, razpošiljanje dejanj postane nepogrešljivo. Dejanja predstavljajo navadne objekte JavaScript, ki pojasnjujejo želeno vrsto spremembe stanja.

Odgovornost za ravnanje s temi dejanji in generiranje poznejšega stanja je na funkciji reduktorja.

Funkcijo odpreme, ki jo zagotavlja useReducer Hook, je zaposlen za pošiljanje akcij. Kot argument sprejme objekt dejanja in s tem sproži ustrezno posodobitev stanja.

V prejšnjih primerih so bila dejanja poslana s sintakso dispatch({type: 'actionType'}). Vendar pa je možno, da dejanja zajemajo dodatne podatke, znane kot tovor, ki nudi dodatne vpoglede v zvezi s posodobitvijo. Na primer:

odprema({ vrsta: 'dodaj', tovor: { id: 1, besedilo: 'Dokončaj domačo nalogo', dokončana: lažno } });

V tem scenariju je dodati dejanje vključuje objekt koristnega tovora, ki povzema podatke o novem opravilu, ki bo vključen v stanje.

Upravljanje kompleksnega stanja z useReducer

Resnična moč useReducer Hook je v njegovi zmožnosti upravljanja zapletenih državnih struktur, ki zajemajo številne med seboj povezane vrednote in zapletene državne prehode.

S centralizacijo logike stanja znotraj reduktorske funkcije postane upravljanje različnih tipov dejanj in sistematično posodabljanje stanja izvedljivo prizadevanje.

Razmislite o scenariju, kjer a obrazec React je sestavljen iz več vnosnih polj. Namesto upravljanja stanja vsakega vnosa posebej prek useState, the useReducer Hook je mogoče uporabiti za celostno upravljanje stanja obrazca.

Funkcija reduktorja lahko spretno obravnava dejanja, ki se nanašajo na spreminjanje določenih polj in celovito validacijo celotnega obrazca.

konst začetniState = {
ime: '',
E-naslov: '',
geslo: '',
isFormValid: lažno,
};

konst reduktor = (stanje, dejanje) => {
stikalo (action.type) {
Ovitek'updateField':
vrnitev {... stanje, [action.payload.field]: action.payload.value };
Ovitek'validateForm':
vrnitev { ...država, isFormValid: action.payload };
privzeto:
vrnitev država;
}
};

V primeru funkcija reduktorja skrbi za dve različni vrsti dejanj: updateField in validateForm. The updateField dejanje olajša spreminjanje določenega polja znotraj stanja z uporabo navedene vrednosti.

Nasprotno pa je validateForm dejanje posodablja isFormValid lastnosti na podlagi predloženega rezultata validacije.

Z uporabo useReducer Kavelj za upravljanje stanja obrazca, vsa povezana stanja in dejanja so konsolidirana znotraj ene entitete, s čimer se izboljša enostavnost razumevanja in vzdrževanja.

Primerjava useReducer z drugimi rešitvami za upravljanje stanja

Čeprav je useReducer Hook je močno orodje za upravljanje stanja, zato je bistveno priznati njegove razlike in kompromise v primerjavi z alternativnimi rešitvami upravljanja stanja znotraj ekosistema React.

useState

The useState Hook zadostuje za upravljanje preprostih, izoliranih stanj znotraj komponente. Njegova sintaksa je bolj jedrnata in enostavna v primerjavi z useReducer. Kljub temu za zapletena stanja ali prehode stanj, useReducer omogoča bolj organiziran pristop.

Redux

Redux predstavlja ugledno knjižnico upravljanja stanja za aplikacije React. Drži se podobnega reduktorja kot useReducer, vendar ponuja dodatne funkcije, kot so centralizirana trgovina, podpora za vmesno programsko opremo in odpravljanje napak pri potovanju skozi čas.

Redux se je izkazal kot idealen za obsežne aplikacije, ki zahtevajo kompleksne zahteve za upravljanje stanja. Vendar pa za manjše projekte ali enostavnejše potrebe upravljanja države, useReducer lahko služi kot lahka in preprostejša alternativa.

Kontekstni API

Reactov Context API omogoča skupno rabo stanja preko več komponent brez uporabe opornega vrtanja. V povezavi z useReducer, lahko prinese centralizirano rešitev za upravljanje stanja.

Medtem ko kombinacija Context API in useReducer se ponaša s precejšnjo močjo, lahko povzroči dodatno zapletenost, če ga primerjamo z uporabo useReducerja v izolaciji.

Kontekstni API je najbolje uporabiti, ko je treba deliti stanje med globoko ugnezdenimi komponentami ali ko se soočamo s kompleksno hierarhijo komponent. Izbira ustrezne rešitve za upravljanje stanja je odvisna od posebnih zahtev zadevne aplikacije.

Za projekte zmerne velikosti, useReducer se lahko izkaže za učinkovito in preprostejšo alternativo Reduxu ali Context API-ju.

Sprostitev preprostosti državnega upravljanja

UseReducer Hook je močan instrument za poenostavitev upravljanja stanja v aplikacijah React. Z upoštevanjem načel reduktorskega vzorca ponuja strukturiran in razširljiv pristop k obravnavanju kompleksnih stanj in prehodov stanj.

Če se uporablja v tandemu z useState Hook, lahko useReducer služi kot lahka alternativa knjižnice, kot sta Redux ali Context API, zlasti v kontekstu manjših do srednje velikih projekti.