image

Access unlimited bootcamps and 650+ courses

50
%OFF
Article image

ES

Eric Santana27/05/2024 22:48
Share

Gerenciamento de Estado Simplificado: UseContext e UseReducer em Ação

  • #React

Nem tudo na vida é useState

Quando falamos em gerenciamento de estado no React, é fácil cair na armadilha de pensar que o useState é a única solução para tudo. Mas calma lá, amigo! Existem outros caminhos.

Todo programador de React.js chega a um momento em que a manipulação de seus estados se torna muito complexa ou aninhada, ou quando é necessário que vários componentes posicionados horizontalmente, ou seja, que não podem ser acessados verticalmente através de componentes pai, sejam acessados via 'props'. Por isso, hoje vamos explorar dois pesos pesados: useContext e useReducer.

Que raios são contextos e reducers?

Vamos desvendar esses conceitos! Um contexto é uma forma de passar dados através da árvore de componentes sem precisar passar props manualmente em cada nível. 

Imagine que você precisa acessar um estado de um tema global (como claro ou escuro) no componente que está construindo, mas ele não pode ser acessado através do componente pai e esse estado deve ser acessado em outros lugares do sistema. O que fazer Jovem padawan? É em uma situação dessas que o contexto pode pode te fornecer uma maneira de acessar um estado geral que não está disponível no props.

image

Já um reducer é um conceito vindo do Redux, que ajuda a gerenciar estados de forma mais organizada, aplicando ações predefinidas. Ele resume as funções de manipulação de estado em um só lugar. O uso de redutores do React pode melhorar o desempenho reduzindo a quantidade de renderizações desnecessárias.

Usando o useContext e useReducer

Vamos dar uma olhada em como implementar contextos e redutores do React com o useReducer e o useContext, com este você pode acessar valores em qualquer lugar da sua árvore de componentes sem a necessidade de props intermediárias. Por exemplo:

const MyContext = React.createContext();


const MyComponent = () => {

const value = useContext(MyContext);

return <div>{value}</div>;

};

Já com o useReducer, você pode gerenciar estados complexos de forma mais eficiente. Por exemplo:

const initialState = { count: 0 };

function reducer(state, action) {
switch (action.type) {
  case 'increment':
    return { count: state.count + 1 };
  case 'decrement':
    return { count: state.count - 1 };
  default:
    throw new Error();
}
}

Hooks unidos para facilitar o gerenciamento dos seus estados

Agora é que tudo fica ainda mais interessante. Quando combinamos a versatilidade do contexto com a manipulação de estados dos redutores criamos um ecossistema semelhante ao do redux, mas com uma maior praticidade de uso e implementação.

Imagine o useContext como a porta de entrada e o useReducer como o guarda-costas dos seus estados. Veja só:

const MyContext = React.createContext();

const MyComponent = () => {

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

return (
  <MyContext.Provider value={{ state, dispatch }}>
    <ChildComponent />
  </MyContext.Provider>
);
};

image

Conclusão

Se quiser mergulhar mais fundo nesse universo do front-end (e back-end também) e ficar por dentro das últimas novidades, acesse meu linkedIn: Eric Santana | LinkedIn. Você também pode ficar por dentro de projetos que existem e ainda vai nascer lá no meu github: efms25 (Eric Santana).

Ilustração de capa: gerada pela Leanardo.ai

Trechos de código e alguns textos: ChatGPT e revisões humanas

Hashtags

#React #FrontEnd #Hooks

Share
Comments (0)