UseReducer Hook je jednou z najlepších možností pre správu stavu v Reacte. Naštartujte svoju cestu s hákom useReducer pomocou tohto sprievodcu.

Správa stavu je kľúčová pri vývoji Reactu a slúži ako základný kameň pre manipuláciu a aktualizáciu údajov v používateľských rozhraniach. Reagovať useState Hook poskytuje priamy prístup k riadeniu stavu, ale so zložitým stavom sa stáva ťažkopádnym. To je miesto useReducer Hák prichádza.

The useReducer Hook ponúka štruktúrovanú metodológiu na riadenie zložitých stavov a prechodov. Objímanie useReducer Hook odomyká flexibilitu a efektivitu, čo vedie k čistejšiemu kódu.

Pochopenie funkcie useReducer Hook

The useReducer Hook je vstavaná funkcia poskytovaná spoločnosťou React, ktorá zefektívňuje riadenie stavu dodržiavaním princípov vzoru reduktora. Ponúka vám organizovanú a škálovateľnú alternatívu k useState Hák, zvlášť vhodný na zvládanie zložitých stavov.

Využitím useReducer Hook, môžete skonsolidovať stav aj jeho prechody v rámci jednej funkcie redukcie.

instagram viewer

Táto funkcia berie aktuálny stav a akciu ako vstupy a následne vytvára nový stav. Funguje na rovnakých princípoch ako funkcia redukcie používaná v JavaScripte Array.prototype.reduce() metóda.

Syntax a príklad Použitie useReducer Hook

Syntax na použitie useReducer Hák je nasledovný:

konšt [stav, odoslanie] = useReducer (reduktor, počiatočný stav);

The useReducer funkcia akceptuje dva argumenty:

  • redukcia (funkcia): Určuje spôsob, akým sa má stav aktualizovať na základe aktuálneho stavu a odoslanej akcie.
  • počiatočný stav (akýkoľvek): Predstavuje hodnotu počiatočného stavu pre komponent.

Pri vyvolaní, useReducer Hook vráti pole pozostávajúce z dvoch prvkov:

  • štát (akýkoľvek): Označuje hodnotu aktuálneho stavu.
  • odoslanie (funkcia): Táto funkcia umožňuje odosielanie akcií na aktualizáciu stavu.

Zvážte nižšie uvedený príklad ilustrujúci použitie useReducer Háčik v správe jednoduchého počítadla:

importovať Reaguj, { useReducer } od'reagovať';
konšt počiatočný stav = 0;

konšt reduktor = (stav, akcia) => {
prepínač (action.type) {
prípad'prírastok':
vrátiť stav + 1;
prípad'decrement':
vrátiť štát - 1;
predvolená:
vrátiť štát;
}
};

konšt Počítadlo = () => {
konšt [počet, odoslanie] = useReducer (reduktor, počiatočný stav);
konšt handleIncrement = () => {
odoslanie ({ typu: 'prírastok' });
};

konšt handleDecrement = () => {
odoslanie ({ typu: 'decrement' });
};

vrátiť (


};

Z vyššie uvedeného obrázku je počiatočný stav 0 je definovaná spolu s funkciou redukcie zodpovednej za spracovanie dvoch typov akcií: prírastok a dekrementovať. Funkcia reduktora náležite upravuje stav v súlade s určenými činnosťami.

Využitím useReducer Hook, stav sa inicializuje a získa sa hodnota aktuálneho stavu aj funkcia odosielania. Funkcia odoslania sa následne využíva na spustenie aktualizácie stavu po kliknutí na príslušné tlačidlá.

Vytvorenie funkcie reduktora

Pre optimálne využitie useReducer Hook, môžete vytvoriť funkciu redukcie, ktorá popisuje, ako by sa mal stav aktualizovať na základe odoslaných akcií. Táto funkcia redukcie akceptuje aktuálny stav a akciu ako argumenty a vráti nový stav.

Zvyčajne ide o funkciu redukcie používa podmienený príkaz switch zvládnuť rôzne typy akcií a podľa toho vykonávať zmeny stavu.

Zvážte nižšie uvedený príklad funkcie redukcie používanej na správu zoznamu úloh:

konšt počiatočný stav = [];

konšt reduktor = (stav, akcia) => {
prepínač (action.type) {
prípad'pridať':
vrátiť [...state, action.payload];
prípad'toggle':
vrátiť state.map((robiť) =>
todo.id action.payload? { ...robiť, dokončené: !todo.completed }: todo
);
prípad'delete':
vrátiť state.filter((robiť) => todo.id !== action.payload);
predvolená:
vrátiť štát;
}
};

Vo vyššie uvedenom prípade funkcia redukcie spracováva tri rôzne typy akcií: pridať, prepnúť, a vymazať. Po obdržaní pridať Akcia, pripojí užitočné zaťaženie (nová položka úlohy) k štát pole.

V prípade prepnúť akcie, strieda sa dokončené vlastnosť položky úlohy priradenej k zadanému ID. The vymazať action na druhej strane eliminuje položku úlohy prepojenú s poskytnutým ID z poľa stavu.

Ak nezodpovedá žiadny z typov akcií, funkcia redukcie vráti aktuálny stav nezmenený.

Dispečerské akcie

Na vykonanie aktualizácií stavu uľahčených useReducer Hook, odoslanie akcií sa stáva nevyhnutným. Akcie predstavujú jednoduché objekty JavaScript, ktoré objasňujú požadovaný typ zmeny stavu.

Zodpovednosť za spracovanie týchto akcií a generovanie následného stavu leží na funkcii reduktora.

Funkcia expedície, vybavená spoločnosťou useReducer Hook, sa používa na odosielanie akcií. Prijíma akčný objekt ako argument, čím podnecuje aktualizáciu príslušného stavu.

V predchádzajúcich príkladoch boli akcie odoslané pomocou syntaxe odoslanie ({type: 'actionType'}). Je však možné, aby akcie zahŕňali doplňujúce údaje, známe ako tzv užitočné zaťaženie, ktorá poskytuje ďalšie informácie týkajúce sa aktualizácie. Napríklad:

odoslanie ({ typu: 'pridať', užitočné zaťaženie: { id: 1, text: "Dokončiť domácu úlohu", dokončené: falošný } });

V tomto scenári, pridať akcia zahŕňa objekt užitočného zaťaženia zapuzdrujúci podrobnosti o novej položke úlohy, ktorá sa má začleniť do stavu.

Správa komplexného stavu pomocou useReducer

Skutočná sila useReducer Hook spočíva v jeho schopnosti riadiť zložité stavové štruktúry, ktoré zahŕňajú množstvo vzájomne prepojených hodnôt a zložitých stavových prechodov.

Centralizáciou logiky stavu v rámci funkcie reduktora sa riadenie rôznych typov akcií a systematická aktualizácia stavu stáva realizovateľným úsilím.

Zvážte scenár, kde a formulár reakcie pozostáva z viacerých vstupných polí. Namiesto spravovania stavu každého vstupu jednotlivo useState, useReducer Hook môže byť použitý na holistické riadenie stavu formulára.

Funkcia redukcie dokáže šikovne zvládnuť akcie súvisiace s úpravou špecifických polí a komplexné overenie celého formulára.

konšt počiatočný stav = {
názov: '',
email: '',
heslo: '',
isFormValid: falošný,
};

konšt reduktor = (stav, akcia) => {
prepínač (action.type) {
prípad'updateField':
vrátiť { ...state, [action.payload.field]: action.payload.value };
prípad'validateForm':
vrátiť { ...štát, isFormValid: action.payload };
predvolená:
vrátiť štát;
}
};

V tomto príklade funkcia redukcie zabezpečuje dva odlišné typy akcií: updateField a validateForm. The updateField akcia uľahčuje úpravu konkrétneho poľa v rámci štátu využitím poskytnutej hodnoty.

Naopak, validateForm akcia aktualizuje isFormValid vlastnosti na základe poskytnutého výsledku overenia.

Zamestnávaním useReducer Hák na správu stavu formulára, všetky súvisiace stavy a akcie sú konsolidované v rámci jedinej entity, čím sa zvyšuje jednoduchosť pochopenia a údržby.

Porovnanie useReducer s inými riešeniami správy štátu

Napriek tomu useReducer Hook predstavuje silný nástroj pre riadenie štátu, je dôležité uznať jeho odlišnosti a kompromisy v porovnaní s alternatívnymi riešeniami riadenia štátu v rámci ekosystému React.

useState

The useState Hook postačuje na riadenie jednoduchých, izolovaných stavov v rámci komponentu. Jeho syntax je stručnejšia a priamočiarejšia v porovnaní s useReducer. Avšak pre zložité stavy alebo prechody stavov, useReducer poskytuje organizovanejší prístup.

Redux

Redux predstavuje významnú knižnicu štátneho manažmentu pre aplikácie React. Drží sa podobného vzoru redukcie ako useReducer, ale poskytuje ďalšie funkcie, ako je centralizovaný obchod, podpora midlvéru a ladenie v čase.

Redux sa ukazuje ako ideálny pre rozsiahle aplikácie vyžadujúce komplexné požiadavky na riadenie stavu. Pre menšie projekty alebo jednoduchšie potreby riadenia štátu však useReducer môže slúžiť ako ľahká a jednoduchšia alternatíva.

Kontextové API

Kontextové API Reactu umožňuje zdieľanie stavu naprieč viacerými komponentmi bez použitia podperného vŕtania. V spojení s useReducermôže priniesť riešenie centralizovaného riadenia štátu.

Zatiaľ čo kombinácia kontextového API a useReducer sa môže pochváliť značnou silou, môže predstavovať dodatočnú zložitosť, ak ju postavíte vedľa seba s použitím useReducer v izolácii.

Kontextové API je najlepšie použiť, keď je potrebné zdieľať stav uprostred hlboko vnorených komponentov alebo keď je konfrontovaný s komplexnou hierarchiou komponentov. Výber vhodného riešenia riadenia štátu závisí od špecifických požiadaviek danej aplikácie.

Pre projekty strednej veľkosti, useReducer sa môže ukázať ako efektívna a jednoduchšia alternatíva k Redux alebo kontextovému API.

Uvoľnenie jednoduchosti riadenia štátu

UseReducer Hook predstavuje účinný nástroj na zjednodušenie správy stavu v aplikáciách React. Dodržiavaním princípov vzoru reduktora ponúka štruktúrovaný a škálovateľný prístup k zvládaniu zložitých stavových a stavových prechodov.

Pri použití v tandeme s useState Hook môže useReducer slúžiť ako ľahká alternatíva knižnice ako Redux alebo kontextové API, najmä v kontexte menších až stredne veľkých projektov.