UseReducer Hook on Reactis üks parimaid olekuhalduse võimalusi. Alustage oma teekonda useReducer Hookiga, kasutades seda juhendit.

Riigihaldus on Reacti arenduses ülioluline, olles nurgakiviks kasutajaliidestes andmete käsitlemisel ja uuendamisel. Reageeri useState Hook pakub oleku haldamiseks lihtsat lähenemist, kuid keerulise oleku korral muutub see tülikaks. See on koht, kus useReducer Konks tuleb sisse.

The useReducer Hook pakub struktureeritud metoodikat keeruliste olekute ja üleminekute haldamiseks. Kallistades useReducer Konks avab paindlikkuse ja tõhususe, mis viib puhtama koodini.

Reduktorkonksu kasutamise mõistmine

The useReducer Hook on Reacti sisseehitatud funktsioon, mis muudab olekuhalduse sujuvamaks, järgides reduktormustri põhimõtteid. See pakub teile organiseeritud ja skaleeritavat alternatiivi useState Konks, eriti sobiv keeruliste olekute käsitlemiseks.

Võimendades useReducer Konks, saate koondada nii oleku kui ka selle üleminekud ühe reduktorfunktsiooni raames.

See funktsioon võtab sisenditena praeguse oleku ja toimingu, luues seejärel uue oleku. See töötab samadel põhimõtetel nagu JavaScriptis kasutatav redutseerimisfunktsioon

instagram viewer
Array.prototype.reduce() meetod.

UseReducer Hooki süntaks ja kasutamise näide

Kasutamise süntaks useReducer Konks on järgmine:

konst [olek, lähetamine] = useReducer (reduktor, algState);

The useReducer funktsioon aktsepteerib kahte argumenti:

  • reduktor (funktsioon): määrab praeguse oleku ja saadetud toimingu põhjal oleku värskendamise viisi.
  • esialgne olek (mis tahes): esindab komponendi algoleku väärtust.

Kutsumise peale, useReducer Hook tagastab massiivi, mis koosneb kahest elemendist:

  • olek (ükskõik milline): Tähistab hetkeoleku väärtust.
  • saatmine (funktsioon): See funktsioon võimaldab saata toiminguid oleku värskendamiseks.

Mõelge allolevale näitele, mis illustreerib selle kasutamist useReducer Lihtsa loenduri haldamise konks:

importida Reageeri, { useReducer } alates'reageeri';
konst esialgne olek = 0;

konst reduktor = (olek, tegevus) => {
lüliti (action.type) {
juhtum'kasv':
tagasi olek + 1;
juhtum'vähenema':
tagasi olek - 1;
vaikimisi:
tagasi riik;
}
};

konst Loendur = () => {
konst [count, dispatch] = useReducer (reduktor, algState);
konst HandIncrement = () => {
saatmine({ tüüp: 'kasv' });
};

konst HandDecrement = () => {
saatmine({ tüüp: 'vähenema' });
};

tagasi (


};

Ülaltoodud illustratsioonilt esialgne olek 0 on määratletud koos reduktorfunktsiooniga, mis vastutab kahte tüüpi toimingute käsitlemise eest: juurdekasv ja vähenemine. Reduktorfunktsioon muudab olekut vastavalt määratud toimingutele.

Võimendades useReducer Hook, olek lähtestatakse ja hangitakse nii praeguse oleku väärtus kui ka saatmisfunktsioon. Edastusfunktsiooni kasutatakse seejärel vastavate nuppude klõpsamisel olekuvärskenduste käivitamiseks.

Reduktorfunktsiooni konstrueerimine

Optimaalseks kasutamiseks useReducer Hook, saate luua redutseerimisfunktsiooni, mis kirjeldab, kuidas olekut tuleks lähetatud toimingute põhjal värskendada. See redutseerimisfunktsioon aktsepteerib argumentidena praegust olekut ja tegevust ning tagastab uue oleku.

Tavaliselt reduktorfunktsioon kasutab lüliti tingimuslauset erinevate toimingutüüpide käsitlemiseks ja vastavalt olekumuudatuste tegemiseks.

Vaatleme allolevat näidet reduktorfunktsioonist, mida kasutatakse ülesannete loendi haldamiseks:

konst esialgne olek = [];

konst reduktor = (olek, tegevus) => {
lüliti (action.type) {
juhtum'lisama':
tagasi [...olek, action.payload];
juhtum'lülita':
tagasi state.map((tegema) =>
todo.id action.payload? { ...tegema, lõpetatud: !todo.completed }: todo
);
juhtum'kustuta':
tagasi state.filter((tegema) => todo.id !== action.payload);
vaikimisi:
tagasi riik;
}
};

Ülaltoodud juhul tegeleb reduktorfunktsioon kolme erineva toimingutüübiga: lisama, lülitija kustutada. Saamisel lisama toimingu, lisab see kasuliku koormuse (uue ülesandeüksuse) üksusele olek massiivi.

Juhul lüliti tegevus, see vaheldub lõpetatud määratud ID-ga seotud ülesandeüksuse atribuut. The kustutada toiming seevastu kõrvaldab olekumassiivist antud ID-ga lingitud ülesandeüksuse.

Kui ükski toimingutüüpidest ei vasta, tagastab reduktorfunktsioon praeguse oleku muutmata kujul.

Saatmistoimingud

Olekuvärskenduste rakendamiseks, mida hõlbustab useReducer Konks, toimingute saatmine muutub hädavajalikuks. Toimingud esindavad lihtsaid JavaScripti objekte, mis selgitavad soovitud oleku muutmise tüüpi.

Vastutus nende toimingute haldamise ja järgneva oleku genereerimise eest lasub redutseerimisfunktsioonil.

Saatmisfunktsioon, mille pakub useReducer Konks, kasutatakse toimingute saatmiseks. See aktsepteerib tegevusobjekti argumendina, ärgitades sellega asjakohast olekuvärskendust.

Eelmistes näidetes saadeti toimingud süntaksi abil dispatch ({type: 'actionType'}). Siiski on mõeldav, et toimingud hõlmavad täiendavaid andmeid, mida nimetatakse kasulik koormus, mis annab värskendusega seotud täiendavaid teadmisi. Näiteks:

saatmine({ tüüp: 'lisama', kasulik koormus: { id: 1, tekst: "Lõpeta kodutöö", lõpetatud: vale } });

Selle stsenaariumi korral on lisama toiming hõlmab kasuliku koormuse objekti, mis kapseldab olekusse lisatava uue ülesandeüksuse üksikasjad.

Keerulise oleku haldamine useReduceri abil

Tõeline tugevus useReducer Hook seisneb selle võimes hallata keerulisi olekustruktuure, mis hõlmavad arvukalt omavahel seotud väärtusi ja keerulisi olekuüleminekuid.

Olekuloogika tsentraliseerimisel redutseerimisfunktsiooni saab mitmekesiste tegevusliikide haldamine ja oleku süstemaatiline ajakohastamine teostatavaks ettevõtmiseks.

Mõelge stsenaariumile, kus a reageerimisvorm koosneb mitmest sisestusväljast. Selle asemel, et hallata iga sisendi olekut eraldi useState, useReducer Konksu saab kasutada vormi oleku terviklikuks haldamiseks.

Redutseerimisfunktsioon saab hästi hakkama konkreetsete väljade muutmise ja kogu vormi tervikliku valideerimisega seotud toimingutega.

konst esialgne olek = {
nimi: '',
email: '',
parool: '',
isFormValid: vale,
};

konst reduktor = (olek, tegevus) => {
lüliti (action.type) {
juhtum'updateField':
tagasi { ...olek, [action.payload.field]: action.payload.value };
juhtum'validateForm':
tagasi { ...osariik, isFormValid: action.payload };
vaikimisi:
tagasi riik;
}
};

Näites hõlmab reduktorfunktsioon kahte erinevat toimingutüüpi. Värskenda väli ja valideeriVorm. The Värskenda väli toiming hõlbustab konkreetse välja muutmist olekus, kasutades ära antud väärtust.

Vastupidi, valideeriVorm tegevus värskendab isFormValid esitatud valideerimistulemuse põhjal.

Kasutades useReducer Vormi oleku haldamise konks, kõik seotud olekud ja toimingud koondatakse ainsusesse, hõlbustades sellega arusaamist ja hooldamist.

Reduceri kasutamise võrdlemine teiste riigihalduslahendustega

kuigi useReducer Hook on riigijuhtimise tõhus tööriist, mille erinevusi ja kompromisse võrreldes Reacti ökosüsteemi alternatiivsete riigijuhtimislahendustega on ülioluline tunnistada.

useState

The useState Konksust piisab lihtsate isoleeritud olekute haldamiseks komponendi sees. Selle süntaks on sisutihedam ja selgem kui useReducer. Sellegipoolest, keerukate olekute või olekuüleminekute jaoks useReducer võimaldab organiseeritumat lähenemist.

Redux

Redux esindab silmapaistvat riigihalduse raamatukogu Reacti rakenduste jaoks. See kleepub sarnase reduktormustriga nagu useReducer, kuid pakub lisafunktsioone, nagu tsentraliseeritud pood, vahevara tugi ja ajas reisimise silumine.

Redux on ideaalne suuremahuliste rakenduste jaoks, mis nõuavad keerulisi olekuhaldusnõudeid. Väiksemate projektide või lihtsamate riigijuhtimisvajaduste puhul aga useReducer võib olla kerge ja lihtsam alternatiiv.

Konteksti API

Reacti konteksti API võimaldab oleku jagamist läbi mitme komponendi, ilma et peaks kasutama tugipuurimist. Seoses useReducer, võib see anda tsentraliseeritud riigihalduse lahenduse.

Kuigi kombinatsioon Context API ja useReducer Sellel on märkimisväärne võimsus, võib see tekitada täiendavat keerukust, kui seda kõrvutatakse useReduceri kasutamisega eraldi.

Konteksti API-d on kõige parem kasutada siis, kui on vaja olekut jagada sügavalt pesastatud komponentide keskel või kui seisate silmitsi keeruka komponentide hierarhiaga. Sobiva riigihalduslahenduse valik sõltub konkreetse rakenduse konkreetsetest nõuetest.

Mõõduka suurusega projektide puhul useReducer võib osutuda tõhusaks ja lihtsamaks alternatiiviks Reduxile või konteksti API-le.

Riigijuhtimise lihtsuse vallandamine

UseReducer Hook on tõhus vahend Reacti rakenduste olekuhalduse lihtsustamiseks. Järgides reduktormustri põhimõtteid, pakub see struktureeritud ja skaleeritavat lähenemist keerukate olekute ja olekuüleminekute käsitlemiseks.

Kui seda kasutatakse koos useState Hookiga, võib useReducer olla kerge alternatiiv teeke nagu Redux või konteksti API, eriti väiksemate ja keskmise suurusega raamatukogude kontekstis projektid.