O gancho useReducer é uma das melhores opções para gerenciamento de estado no React. Inicie sua jornada com o useReducer Hook usando este guia.

O gerenciamento de estado é crucial no desenvolvimento do React, servindo como base para o tratamento e atualização de dados nas interfaces do usuário. Reagir useState Hook fornece uma abordagem direta para gerenciar o estado, mas torna-se complicado com o estado complexo. É aí que o useReducer Gancho entra.

O useReducer Hook oferece uma metodologia estruturada para gerenciar estados e transições complexos. Abraçando o useReducer Hook desbloqueia flexibilidade e eficiência, levando a um código mais limpo.

Entendendo o Gancho useReducer

O useReducer Hook é um recurso embutido fornecido pelo React que agiliza o gerenciamento de estado aderindo aos princípios do padrão redutor. Ele oferece uma alternativa organizada e escalável ao useState Hook, particularmente adequado para lidar com estados complexos.

Ao alavancar o useReducer Hook, você pode consolidar o estado e suas transições em uma única função redutora.

Essa função recebe o estado atual e uma ação como entrada, produzindo subsequentemente o novo estado. Ele opera com os mesmos princípios da função redutora empregada no JavaScript Array.prototype.reduce() método.

Sintaxe e exemplo de uso do gancho useReducer

A sintaxe para utilizar o useReducer Gancho é o seguinte:

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

O useReducer função aceita dois argumentos:

  • redutor (função): Determina a forma como o estado deve ser atualizado com base no estado atual e na ação despachada.
  • estado inicial (qualquer): Representa o valor do estado inicial do componente.

Após a invocação, o useReducer Hook retorna uma matriz composta por dois elementos:

  • estado (qualquer): Denota o valor do estado atual.
  • expedição (função): Esta função permite o envio de ações para atualizar o estado.

Considere o exemplo abaixo ilustrando o uso do useReducer Gancho no gerenciamento de um contador simples:

importar Reagir, { useReducer } de'reagir';
const estado inicial = 0;

const redutor = (estado, ação) => {
trocar (Tipo de acão) {
caso'incremento':
retornar estado + 1;
caso'diminuir':
retornar estado - 1;
padrão:
retornar estado;
}
};

const Contador = () => {
const [count, dispatch] = useReducer (reducer, initialState);
const handleIncrement = () => {
Despacho({ tipo: 'incremento' });
};

const handleDecrement = () => {
Despacho({ tipo: 'diminuir' });
};

retornar (


};

Da ilustração acima, um estado inicial de 0 é definido juntamente com uma função redutora responsável por lidar com dois tipos de ações: incremento e diminuir. A função redutora modifica devidamente o estado de acordo com as ações especificadas.

Ao alavancar o useReducer Hook, o estado é inicializado e o valor do estado atual e a função de despacho são adquiridos. A função de envio é subsequentemente utilizada para acionar atualizações de estado ao clicar nos respectivos botões.

Construindo uma função redutora

Para uma utilização óptima do useReducer Hook, você pode criar uma função redutora que descreve como o estado deve ser atualizado com base nas ações despachadas. Essa função redutora aceita o estado atual e a ação como argumentos e retorna o novo estado.

Normalmente, uma função redutora emprega uma instrução condicional switch para lidar com vários tipos de ação e efetuar modificações de estado de acordo.

Considere o exemplo abaixo de uma função redutora utilizada para gerenciar uma lista de tarefas:

const estadoinicial = [];

const redutor = (estado, ação) => {
trocar (Tipo de acão) {
caso'adicionar':
retornar [...estado, action.payload];
caso'alternar':
retornar estado.mapa((pendência) =>
todo.id action.payload? { ...pendência, concluído: !todo.concluído }: todo
);
caso'excluir':
retornar estado.filtro((pendência) => todo.id !== action.payload);
padrão:
retornar estado;
}
};

Na instância acima, a função de redutor lida com três tipos de ação distintos: adicionar, alternar, e excluir. Ao receber o adicionar ação, ele anexa a carga útil (um novo item de tarefa) ao estado variedade.

No caso do alternar ação, alterna o concluído propriedade do item de tarefa associado ao ID especificado. O excluir A ação, por outro lado, elimina o item de tarefa vinculado ao ID fornecido da matriz de estado.

Caso nenhum dos tipos de ação corresponda, a função redutora retorna o estado atual inalterado.

Ações de Despacho

Para efetuar atualizações de estado facilitadas pelo useReducer Hook, o despacho de ações torna-se indispensável. As ações representam objetos JavaScript simples que elucidam o tipo desejado de modificação de estado.

A responsabilidade de lidar com essas ações e gerar o estado subsequente é da função redutora.

A função de despacho, fornecida pelo useReducer Hook, é empregado para despachar ações. Ele aceita um objeto de ação como argumento, instigando assim a atualização de estado pertinente.

Nos exemplos anteriores, as ações foram despachadas usando a sintaxe dispatch({type: 'actionType'}). No entanto, é concebível que as ações abranjam dados suplementares, conhecidos como carga útil, que fornece mais informações sobre a atualização. Por exemplo:

Despacho({ tipo: 'adicionar', carga útil: { eu ia: 1, texto: 'Terminar o dever de casa', concluído: falso } });

Neste cenário, o adicionar A ação inclui um objeto de carga útil encapsulando os detalhes do novo item de tarefa a ser incorporado ao estado.

Gerenciando o estado complexo com useReducer

A verdadeira força do useReducer Hook reside em sua capacidade de gerenciar estruturas de estado intrincadas, abrangendo vários valores interconectados e transições de estado intrincadas.

Ao centralizar a lógica do estado dentro de uma função redutora, o gerenciamento de diversos tipos de ação e a atualização sistemática do estado torna-se um empreendimento viável.

Considere um cenário em que um formulário de reação consiste em vários campos de entrada. Em vez de gerenciar o estado de cada entrada individualmente por meio de useState, o useReducer Hook pode ser empregado para gerenciar de forma holística o estado do formulário.

A função redutora pode lidar habilmente com ações pertinentes à modificação de campos específicos e à validação abrangente de todo o formulário.

const estadoinicial = {
nome: '',
e-mail: '',
senha: '',
isFormValid: falso,
};

const redutor = (estado, ação) => {
trocar (Tipo de acão) {
caso'campo de atualização':
retornar { ...state, [action.payload.field]: action.payload.value };
caso'validateForm':
retornar { ...estado, isFormValid: action.payload };
padrão:
retornar estado;
}
};

No exemplo, a função redutor atende a dois tipos de ação distintos: campo de atualização e validarFormulário. O campo de atualização A ação facilita a modificação de um campo específico dentro do estado, utilizando o valor fornecido.

Por outro lado, o validarFormulário ação atualiza o isFormValid propriedade com base no resultado de validação fornecido.

Ao empregar o useReducer Hook para gerenciar o estado do formulário, todos os estados e ações associados são consolidados em uma entidade única, aumentando assim a facilidade de compreensão e manutenção.

Comparando useReducer com outras soluções de gerenciamento de estado

Apesar de useReducer Hook se destaca como uma ferramenta potente para gerenciamento de estado, é vital reconhecer suas diferenças e compensações quando comparado a soluções alternativas de gerenciamento de estado dentro do ecossistema React.

useState

O useState Hook é suficiente para gerenciar estados simples e isolados dentro de um componente. Sua sintaxe é mais concisa e direta em comparação com useReducer. No entanto, para estado intrincado ou transições de estado, useReducer permite uma abordagem mais organizada.

Restaurado

Redux representa uma biblioteca de gerenciamento de estado proeminente para aplicativos React. Adere a um padrão redutor semelhante ao useReducer, ainda fornece recursos adicionais, como armazenamento centralizado, suporte a middleware e depuração de viagem no tempo.

O Redux se mostra ideal para aplicativos de grande escala que exigem requisitos complexos de gerenciamento de estado. No entanto, para projetos menores ou necessidades de gerenciamento de estado mais simples, useReducer pode servir como uma alternativa leve e mais simples.

API de contexto

A API Context do React permite o compartilhamento de estado em vários componentes sem recorrer à perfuração de suporte. Em conjunção com useReducer, pode gerar uma solução de gerenciamento de estado centralizado.

Embora a combinação de API de contexto e useReducer possui um poder considerável, pode introduzir complexidade adicional quando justaposto com a utilização de useReducer isoladamente.

A API de contexto é melhor empregada quando há necessidade de compartilhar o estado entre componentes profundamente aninhados ou quando confrontado com uma hierarquia complexa de componentes. A seleção de uma solução de gerenciamento de estado apropriada depende dos requisitos específicos do aplicativo em questão.

Para projetos de tamanho moderado, useReducer pode provar ser uma alternativa eficaz e mais simples ao Redux ou à API de contexto.

Liberando a Simplicidade do Gerenciamento de Estado

O gancho useReducer se destaca como um instrumento potente para simplificar o gerenciamento de estado em aplicativos React. Aderindo aos princípios do padrão redutor, ele oferece uma abordagem estruturada e escalável para lidar com estados complexos e transições de estado.

Quando empregado em conjunto com o gancho useState, useReducer pode servir como uma alternativa leve para bibliotecas como Redux ou a Context API, particularmente no contexto de pequenos e médios projetos.