UseReducer Hook è una delle migliori opzioni per la gestione dello stato in React. Dai il via al tuo viaggio con useReducer Hook utilizzando questa guida.

La gestione dello stato è fondamentale nello sviluppo di React, fungendo da pietra angolare per la gestione e l'aggiornamento dei dati nelle interfacce utente. Reagisci useState Hook fornisce un approccio semplice per gestire lo stato, ma diventa ingombrante con uno stato complesso. Ecco dove il useReducer Il gancio entra.

IL useReducer Hook offre una metodologia strutturata per la gestione di stati e transizioni complessi. Abbracciare il useReducer Hook sblocca la flessibilità e l'efficienza, portando a un codice più pulito.

Comprensione dell'utilizzo di UseReducer Hook

IL useReducer Hook è una funzionalità integrata fornita da React che semplifica la gestione dello stato aderendo ai principi del modello reducer. Ti offre un'alternativa organizzata e scalabile al useState Hook, particolarmente adatto per gestire stati complessi.

Sfruttando il

instagram viewer
useReducer Hook, puoi consolidare sia lo stato che le sue transizioni all'interno di una singola funzione di riduzione.

Questa funzione prende lo stato corrente e un'azione come input, producendo successivamente il nuovo stato. Opera sugli stessi principi della funzione di riduzione impiegata in JavaScript Array.prototipo.reduce() metodo.

Sintassi ed esempio di utilizzo dell'hook useReducer

La sintassi per l'utilizzo di useReducer Il gancio è il seguente:

cost [state, dispatch] = useReducer (reducer, initialState);

IL useReducer funzione accetta due argomenti:

  • riduttore (funzione): determina il modo in cui lo stato deve essere aggiornato in base allo stato corrente e all'azione inviata.
  • stato iniziale (qualsiasi): Rappresenta il valore dello stato iniziale per il componente.

All'invocazione, il useReducer Hook restituisce un array composto da due elementi:

  • stato (qualsiasi): Indica il valore dello stato corrente.
  • spedizione (funzione): Questa funzione abilita l'invio di azioni per aggiornare lo stato.

Si consideri l'esempio seguente che illustra l'uso di useReducer Hook nella gestione di un semplice contatore:

importare Reagisci, { useReducer } da'reagire';
cost stato iniziale = 0;

cost riduttore = (stato, azione) => {
interruttore (azione.tipo) {
caso'incremento':
ritorno stato + 1;
caso'decremento':
ritorno stato - 1;
predefinito:
ritorno stato;
}
};

cost Contatore = () => {
cost [count, dispatch] = useReducer (reducer, initialState);
cost handleIncrement = () => {
spedizione({ tipo: 'incremento' });
};

cost handleDecrement = () => {
spedizione({ tipo: 'decremento' });
};

ritorno (


};

Dall'illustrazione sopra, uno stato iniziale di 0 è definito insieme a una funzione riduttore responsabile della gestione di due tipi di azioni: incremento E decremento. La funzione riduttore modifica opportunamente lo stato in accordo con le azioni specificate.

Sfruttando il useReducer Hook, lo stato viene inizializzato e vengono acquisiti sia il valore dello stato corrente che la funzione di invio. La funzione di invio viene successivamente utilizzata per attivare gli aggiornamenti di stato facendo clic sui rispettivi pulsanti.

Costruzione di una funzione di riduzione

Per un utilizzo ottimale del useReducer Hook, puoi creare una funzione di riduzione che descriva come lo stato dovrebbe essere aggiornato in base alle azioni inviate. Questa funzione riduttore accetta lo stato corrente e l'azione come argomenti e restituisce il nuovo stato.

Tipicamente, una funzione di riduzione utilizza un'istruzione condizionale switch per gestire vari tipi di azioni ed effettuare modifiche di stato di conseguenza.

Considera l'esempio seguente di una funzione di riduzione utilizzata per gestire un elenco di cose da fare:

cost stato iniziale = [];

cost riduttore = (stato, azione) => {
interruttore (azione.tipo) {
caso'aggiungere':
ritorno [...stato, azione.payload];
caso'commuta':
ritorno stato.mappa((fare) =>
todo.id azione.payload? { ...fare, completato: !todo.completed }: cose da fare
);
caso'eliminare':
ritorno stato.filtro((fare) => todo.id !== azione.payload);
predefinito:
ritorno stato;
}
};

Nell'esempio precedente, la funzione reducer gestisce tre distinti tipi di azione: aggiungere, alternare, E eliminare. Dopo aver ricevuto il aggiungere action, aggiunge il payload (un nuovo elemento todo) al file stato vettore.

Nel caso del alternare azione, alterna il completato proprietà dell'elemento todo associato all'ID specificato. IL eliminare action, invece, elimina dall'array di stato l'elemento todo collegato all'ID fornito.

Se nessuno dei tipi di azione corrisponde, la funzione reducer restituisce inalterato lo stato corrente.

Azioni di spedizione

Per effettuare gli aggiornamenti dello stato agevolati dall'art useReducer Hook, l'invio delle azioni diventa indispensabile. Le azioni rappresentano semplici oggetti JavaScript che chiariscono il tipo desiderato di modifica dello stato.

La responsabilità di gestire queste azioni e generare lo stato successivo spetta alla funzione riduttore.

La funzione di spedizione, fornita dal useReducer Hook, è impiegato per inviare azioni. Accetta un oggetto azione come argomento, istigando così l'aggiornamento dello stato pertinente.

Negli esempi precedenti, le azioni sono state inviate utilizzando la sintassi spedizione({tipo: 'actionType'}). Tuttavia, è concepibile che le azioni comprendano dati supplementari, noti come file carico utile, che fornisce ulteriori approfondimenti relativi all'aggiornamento. Ad esempio:

spedizione({ tipo: 'aggiungere', carico utile: { id: 1, testo: 'Finire i compiti', completato: falso } });

In questo scenario, il aggiungere action include un oggetto payload che incapsula i dettagli del nuovo elemento todo da incorporare nello stato.

Gestione dello stato complesso con useReducer

La vera forza del useReducer Hook risiede nella sua capacità di gestire complesse strutture di stato, comprendendo numerosi valori interconnessi e intricate transizioni di stato.

Centralizzando la logica dello stato all'interno di una funzione riduttiva, la gestione di diversi tipi di azione e l'aggiornamento sistematico dello stato diventa un'impresa fattibile.

Considera uno scenario in cui a modulo di reazione è costituito da più campi di input. Invece di gestire individualmente lo stato di ciascun input tramite useState, IL useReducer Hook può essere impiegato per gestire in modo olistico lo stato del modulo.

La funzione di riduttore può gestire abilmente le azioni pertinenti alla modifica di campi specifici e la convalida completa dell'intero modulo.

cost stato iniziale = {
nome: '',
e-mail: '',
parola d'ordine: '',
isFormValid: falso,
};

cost riduttore = (stato, azione) => {
interruttore (azione.tipo) {
caso'Aggiorna Campo':
ritorno { ...state, [action.payload.field]: action.payload.value };
caso'validateForm':
ritorno { ...stato, isFormValid: azione.payload };
predefinito:
ritorno stato;
}
};

Nell'esempio, la funzione reducer si rivolge a due distinti tipi di azione: Aggiorna Campo E validateForm. IL Aggiorna Campo action facilita la modifica di un campo specifico all'interno dello stato utilizzando il valore fornito.

Al contrario, il validateForm l'azione aggiorna il isFormValid proprietà in base al risultato di convalida fornito.

Impiegando il useReducer Hook per gestire lo stato del modulo, tutti gli stati e le azioni associati sono consolidati all'interno di un'unica entità, migliorando così la facilità di comprensione e manutenzione.

Confronto di useReducer con altre soluzioni di gestione dello stato

sebbene il useReducer Hook rappresenta un potente strumento per la gestione dello stato, è fondamentale riconoscerne le differenze e i compromessi rispetto alle soluzioni alternative di gestione dello stato all'interno dell'ecosistema React.

useState

IL useState Hook è sufficiente per gestire stati semplici e isolati all'interno di un componente. La sua sintassi è più concisa e diretta rispetto a useReducer. Tuttavia, per stati complessi o transizioni di stato, useReducer offre un approccio più organizzato.

Redux

Redux rappresenta un'importante libreria di gestione dello stato per applicazioni React. Aderisce a un modello di riduttore simile a useReducer, ma fornisce funzionalità aggiuntive come un archivio centralizzato, il supporto del middleware e il debug del viaggio nel tempo.

Redux si rivela ideale per applicazioni su larga scala che richiedono complessi requisiti di gestione dello stato. Tuttavia, per progetti più piccoli o esigenze di gestione statale più semplici, useReducer può servire come alternativa leggera e più semplice.

API di contesto

L'API Context di React consente la condivisione dello stato su più componenti senza ricorrere alla perforazione dell'elica. Insieme a useReducer, può produrre una soluzione di gestione dello stato centralizzata.

Mentre la combinazione di Context API e useReducer vanta una notevole potenza, può introdurre ulteriore complessità se giustapposta all'utilizzo di useReducer in isolamento.

L'API di contesto viene utilizzata al meglio quando è necessario condividere lo stato tra componenti profondamente nidificati o quando ci si trova di fronte a una complessa gerarchia di componenti. La selezione di una soluzione di gestione dello stato appropriata dipende dai requisiti specifici dell'applicazione in questione.

Per progetti di modeste dimensioni, useReducer può rivelarsi un'alternativa efficace e più semplice a Redux o alle Context API.

Liberare la semplicità della gestione dello stato

UseReducer Hook rappresenta un potente strumento per semplificare la gestione dello stato all'interno delle applicazioni React. Aderendo ai principi del modello riduttore, offre un approccio strutturato e scalabile alla gestione di transizioni di stato e di stato complesse.

Se impiegato in tandem con useState Hook, useReducer può fungere da alternativa leggera a librerie come Redux o l'API Context, in particolare nel contesto di piccole e medie dimensioni progetti.