useReducer Hook on yksi parhaista vaihtoehdoista tilanhallintaan Reactissa. Aloita matkasi useReducer Hookin avulla tämän oppaan avulla.

Valtionjohtaminen on React-kehityksessä avainasemassa, joka toimii kulmakivenä käyttöliittymien tietojen käsittelyssä ja päivittämisessä. Reagoi useState Hook tarjoaa suoraviivaisen lähestymistavan tilan hallintaan, mutta siitä tulee hankalaa monimutkaisen tilan kanssa. Siellä se useReducer Koukku tulee sisään.

The useReducer Hook tarjoaa jäsennellyn menetelmän monimutkaisten tilojen ja siirtymien hallintaan. Syleilemässä useReducer Hook avaa joustavuuden ja tehokkuuden, mikä johtaa puhtaampaan koodiin.

Reducer Hookin käytön ymmärtäminen

The useReducer Hook on Reactin tarjoama sisäänrakennettu ominaisuus, joka virtaviivaistaa tilanhallintaa noudattamalla vähennyskuvion periaatteita. Se tarjoaa sinulle organisoidun ja skaalautuvan vaihtoehdon useState Koukku, sopii erityisesti monimutkaisten tilojen käsittelyyn.

Hyödyntämällä useReducer Hook, voit yhdistää sekä tilan että sen siirtymät yhteen supistustoimintoon.

instagram viewer

Tämä toiminto ottaa nykyisen tilan ja toiminnon syötteinä, minkä jälkeen se tuottaa uuden tilan. Se toimii samoilla periaatteilla kuin JavaScriptissä käytetty vähennystoiminto Array.prototype.reduce() menetelmä.

Syntaksi ja esimerkki useReducer Hookin käytöstä

Syntaksi useReducer Koukku on seuraava:

konst [tila, lähetys] = useReducer (reducer, originalState);

The useReducer funktio hyväksyy kaksi argumenttia:

  • vähennysventtiili (toiminto): Määrittää tavan, jolla tila tulee päivittää nykyisen tilan ja lähetetyn toiminnon perusteella.
  • aloitustila (mikä tahansa): Edustaa komponentin alkutila-arvoa.

Kutsuttaessa useReducer Hook palauttaa taulukon, joka koostuu kahdesta elementistä:

  • tila (mikä tahansa): Tarkoittaa nykyisen tilan arvoa.
  • lähetys (toiminto): Tämä toiminto mahdollistaa toimenpiteiden lähettämisen tilan päivittämiseksi.

Harkitse alla olevaa esimerkkiä, joka havainnollistaa laitteen käyttöä useReducer Koukku yksinkertaisen laskurin hallintaan:

tuonti Reagoi, { useReducer } alkaen'reagoi';
konst aloitustila = 0;

konst vähennysventtiili = (tila, toiminta) => {
vaihtaa (toiminta.tyyppi) {
tapaus'lisäys':
palata tila + 1;
tapaus"vähentää":
palata valtio - 1;
oletuksena:
palata osavaltio;
}
};

konst Laskuri = () => {
konst [count, dispatch] = useReducer (reducer, originState);
konst HandIncrement = () => {
lähettää({ tyyppi: 'lisäys' });
};

konst HandDecrement = () => {
lähettää({ tyyppi: "vähentää" });
};

palata (


};

Yllä olevasta kuvasta alkutila 0 on määritelty kahden tyyppisten toimintojen käsittelystä vastaavan vähennystoiminnon rinnalla: lisäys ja vähennys. Vähentäjätoiminto muuttaa tilaa asianmukaisesti määritettyjen toimien mukaisesti.

Hyödyntämällä useReducer Hook, tila alustetaan ja sekä nykyisen tilan arvo että lähetystoiminto hankitaan. Lähetystoimintoa käytetään myöhemmin tilapäivitysten käynnistämiseen vastaavia painikkeita napsauttamalla.

Reduktorifunktion rakentaminen

Optimaaliseen käyttöön useReducer Koukku, voit luoda vähennystoiminnon, joka kuvaa, kuinka tila tulee päivittää lähetettyjen toimien perusteella. Tämä vähennystoiminto hyväksyy nykyisen tilan ja toiminnon argumentteina ja palauttaa uuden tilan.

Tyypillisesti vähennystoiminto käyttää vaihtoehdollista lauseketta käsitellä erilaisia ​​toimintatyyppejä ja toteuttaa tilan muutoksia vastaavasti.

Harkitse alla olevaa esimerkkiä vähennystoiminnosta, jota käytetään tehtäväluettelon hallintaan:

konst aloitustila = [];

konst vähennysventtiili = (tila, toiminta) => {
vaihtaa (toiminta.tyyppi) {
tapaus'lisätä':
palata [...tila, toiminta.payload];
tapaus'vaihda':
palata state.map((tehdä) =>
todo.id action.payload? { ...tehdä, valmiiksi: !todo.completed }: tehtävä
);
tapaus'poistaa':
palata state.filter((tehdä) => todo.id !== action.payload);
oletuksena:
palata osavaltio;
}
};

Yllä olevassa tapauksessa vähennystoiminto käsittelee kolmea erilaista toimintatyyppiä: lisätä, vaihtaa, ja poistaa. Saatuaan lisätä toiminto, se liittää hyötykuorman (uuden tehtäväkohteen) osavaltio joukko.

Kun kyseessä on vaihtaa toimintoa, se vuorottelee valmiiksi määritettyyn tunnukseen liittyvän tehtäväkohteen ominaisuus. The poistaa toiminto puolestaan ​​eliminoi annettuun tunnukseen linkitetyn tehtäväkohteen tilataulukosta.

Jos mikään toimintotyypeistä ei vastaa, vähennystoiminto palauttaa nykyisen tilan muuttumattomana.

Lähetystoimet

Suorittaaksesi tilapäivitykset, joita helpottaa useReducer Koukku, toimien lähettämisestä tulee välttämätön. Toiminnot edustavat tavallisia JavaScript-objekteja, jotka selventävät halutun tilan muokkaustyypin.

Vastuu näiden toimien käsittelystä ja seuraavan tilan luomisesta on vähennystoiminnolla.

Lähetystoiminto, jonka on toimittanut useReducer Koukku, käytetään toimien lähettämiseen. Se hyväksyy toimintaobjektin argumenttina, mikä käynnistää asiaankuuluvan tilapäivityksen.

Edellisissä esimerkeissä toiminnot lähetettiin käyttämällä syntaksia lähetys({type: 'actionType'}). On kuitenkin ajateltavissa, että toimet kattavat lisätiedot, jotka tunnetaan nimellä hyötykuorma, joka tarjoaa lisätietoa päivityksestä. Esimerkiksi:

lähettää({ tyyppi: 'lisätä', hyötykuorma: { id: 1, teksti: "Lopeta läksyt", valmiiksi: väärä } });

Tässä skenaariossa lisätä toiminto sisältää hyötykuormaobjektin, joka kapseloi tilaan sisällytettävän uuden tehtäväkohteen tiedot.

Monimutkaisen tilan hallinta useReducerilla

Todellinen vahvuus useReducer Hook piilee sen kyvyssä hallita monimutkaisia ​​tilarakenteita, jotka kattavat lukuisia toisiinsa liittyviä arvoja ja monimutkaisia ​​tilasiirtymiä.

Keskittämällä tilalogiikka supistustoimintoon, erilaisten toimintatyyppien hallinta ja tilan systemaattinen päivittäminen tulee toteuttamiskelpoiseksi yritykseksi.

Harkitse skenaariota, jossa a react-lomake koostuu useista syöttökentistä. Sen sijaan, että hallittaisiin jokaisen tulon tilaa erikseen useState, useReducer Koukkua voidaan käyttää lomakkeen tilan kokonaisvaltaiseen hallintaan.

Vähennystoiminto pystyy käsittelemään taitavasti toimintoja, jotka liittyvät tiettyjen kenttien muokkaamiseen ja koko lomakkeen kattavaan validointiin.

konst aloitustila = {
nimi: '',
sähköposti: '',
Salasana: '',
isFormValid: väärä,
};

konst vähennysventtiili = (tila, toiminta) => {
vaihtaa (toiminta.tyyppi) {
tapaus'updateField':
palata { ...tila, [toiminta.payload.field]: action.payload.value };
tapaus'validateForm':
palata { ...tila, isFormValid: action.payload };
oletuksena:
palata osavaltio;
}
};

Esimerkissä vähennystoiminto palvelee kahta erilaista toimintatyyppiä: päivityskenttä ja validateForm. The päivityskenttä toiminta helpottaa tietyn kentän muokkaamista tilassa käyttämällä annettua arvoa.

Päinvastoin, validateForm toiminta päivittää isFormValid ominaisuus toimitetun vahvistustuloksen perusteella.

Käyttämällä useReducer Koukku lomakkeen tilan hallintaan, kaikki liittyvät tilat ja toiminnot on yhdistetty yksittäiseen kokonaisuuteen, mikä helpottaa ymmärtämistä ja ylläpitoa.

UseReducerin vertailu muihin valtionhallintaratkaisuihin

vaikkakin useReducer Hook on tehokas valtionhallinnon työkalu, jonka eroavaisuudet ja kompromissit on tärkeää tunnustaa verrattuna vaihtoehtoisiin valtionhallintaratkaisuihin React-ekosysteemissä.

useState

The useState Hook riittää yksinkertaisten, eristettyjen tilojen hallintaan komponentin sisällä. Sen syntaksi on ytimekkäämpi ja yksinkertaisempi verrattuna useReducer. Siitä huolimatta monimutkaisia ​​tila- tai tilasiirtymiä varten useReducer tarjoaa järjestelmällisemmän lähestymistavan.

Redux

Redux edustaa merkittävää valtionhallinnon kirjastoa React-sovelluksiin. Se kiinnittyy samanlaiseen supistuskuvioon kuin useReducer, mutta sisältää lisäominaisuuksia, kuten keskitetyn myymälän, väliohjelmistotuen ja aikamatkan virheenkorjauksen.

Redux on ihanteellinen suuriin sovelluksiin, jotka edellyttävät monimutkaisia ​​tilanhallintavaatimuksia. Kuitenkin pienempiin projekteihin tai yksinkertaisempiin valtionhallinnon tarpeisiin useReducer voi toimia kevyenä ja yksinkertaisempana vaihtoehtona.

Context API

Reactin Context API mahdollistaa tilan jakamisen useiden komponenttien välillä turvautumatta potkuriporaukseen. Yhdessä kanssa useReducer, se voi tuottaa keskitetyn valtionhallintaratkaisun.

Vaikka yhdistelmä Context API ja useReducer sillä on huomattava teho, se voi lisätä monimutkaisuutta, kun sitä rinnastetaan useReducerin erilliskäyttöön.

Konteksti-API: tä käytetään parhaiten silloin, kun tila on jaettava syvälle sisäkkäisten komponenttien keskellä tai kun on edessään monimutkainen komponenttihierarkia. Sopivan tilanhallintaratkaisun valinta riippuu kulloisenkin sovelluksen erityisvaatimuksista.

Kohtalaisen kokoisille projekteille useReducer voi osoittautua tehokkaaksi ja yksinkertaisemmaksi vaihtoehdoksi Reduxille tai Context API: lle.

Valtionhallinnon yksinkertaisuuden valloilleen

UseReducer Hook on tehokas väline tilanhallinnan yksinkertaistamiseen React-sovelluksissa. Noudattamalla vähennyskuvion periaatteita se tarjoaa jäsennellyn ja skaalautuvan lähestymistavan monimutkaisten tila- ja tilasiirtymien käsittelyyn.

Yhdessä useState Hookin kanssa useReducer voi toimia kevyenä vaihtoehtona kirjastot, kuten Redux tai Context API, erityisesti pienten ja keskikokoisten kirjastojen yhteydessä hankkeita.