Gerenciando estados de APIs no React com useReducer

Aprenda a gerenciar estados vindos de APIs no React utilizando o hook useReducer.

Entendendo o useReducer

O hook useReducer é uma excelente ferramenta para gerenciar estados complexos em aplicações React, especialmente quando lidamos com dados vindos de APIs. Ele nos permite organizar a lógica do estado de uma maneira mais estruturada e previsível. Neste tutorial, vamos explorar como implementar o useReducer para gerenciar estados que são atualizados a partir de chamadas de APIs.

O que é o useReducer?

O useReducer é uma alternativa ao useState do React e é particularmente útil quando o estado que você está manipulando é um objeto ou quando você tem várias transições de estado. Ele funciona com um padrão semelhante ao Redux, o que facilita a compreensão para quem já tem experiência com essa biblioteca.

Estrutura básica do useReducer

Para utilizar o useReducer, precisamos definir um reducer, que é uma função que recebe o estado atual e uma ação, e retorna um novo estado. Veja um exemplo básico:

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();
  }
}

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

Neste código, temos um estado inicial initialState, que contém uma propriedade count. O reducer define duas ações: increment e decrement, que alteram o valor de count de acordo com a ação disparada. A função dispatch é utilizada para enviar ações ao reducer.

Integrando com APIs

Agora, vamos ver como integrar o useReducer com chamadas de API. Imagine que estamos buscando dados de usuários de uma API e queremos gerenciar esse estado.

import React, { useReducer, useEffect } from 'react';

const initialState = { users: [], loading: true };

function reducer(state, action) {
  switch (action.type) {
    case 'FETCH_SUCCESS':
      return { ...state, users: action.payload, loading: false };
    case 'FETCH_ERROR':
      return { ...state, loading: false };
    default:
      throw new Error();
  }
}

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

  useEffect(() => {
    fetch('https://api.example.com/users')
      .then(response => response.json())
      .then(data => {
        dispatch({ type: 'FETCH_SUCCESS', payload: data });
      })
      .catch(error => {
        dispatch({ type: 'FETCH_ERROR' });
      });
  }, []);

  if (state.loading) return <p>Loading...</p>;

  return (
    <ul>
      {state.users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

Neste exemplo, criamos um componente UserList que utiliza o useReducer para gerenciar o estado dos usuários. O useEffect é responsável por buscar os dados da API assim que o componente é montado. Com a resposta recebida, despachamos a ação FETCH_SUCCESS para atualizar o estado com os dados dos usuários. Caso ocorra um erro, despachamos a ação FETCH_ERROR.

Vantagens do uso do useReducer

Utilizar useReducer para gerenciar estados relacionados a APIs traz várias vantagens:

  • Organização do código: a lógica do estado fica centralizada no reducer, facilitando a leitura e manutenção.
  • Facilidade em lidar com múltiplos estados: se o estado da sua aplicação se tornar complexo, o useReducer permite gerenciá-lo de forma mais eficaz do que o useState.
  • Previsibilidade: como o estado é alterado de maneira controlada através de ações, fica mais fácil entender como o estado da aplicação muda ao longo do tempo.

Conclusão

O hook useReducer é uma poderosa ferramenta que, quando combinada com chamadas de API, permite gerenciar estados de forma eficiente e estruturada. Ao entender sua implementação, você estará mais preparado para criar aplicações React escaláveis e de fácil manutenção. Experimente implementar o useReducer em seus projetos e veja como ele pode melhorar seu fluxo de trabalho.

O gerenciamento de estado em aplicações React é um aspecto crucial para o desenvolvimento de interfaces dinâmicas e responsivas. Com o crescimento das aplicações, especialmente as que consomem APIs, surge a necessidade de uma abordagem mais estruturada para lidar com o estado. O hook useReducer se destaca nesse cenário, permitindo que desenvolvedores organizem sua lógica de estado de forma clara e eficiente. Neste texto, vamos explorar como este hook pode ser uma solução poderosa para gerenciar estados complexos, contribuindo para a criação de aplicações robustas e escaláveis.

Algumas aplicações:

  • Gerenciamento de estados complexos em aplicações React
  • Integração com APIs RESTful
  • Desenvolvimento de interfaces dinâmicas e responsivas

Dicas para quem está começando

  • Entenda a diferença entre useState e useReducer
  • Pratique a construção de reducers simples
  • Experimente implementar useReducer em pequenos projetos antes de projetos maiores

Contribuições de Gabriel Nogueira

Compartilhe este tutorial: Como usar useReducer para gerenciar estados vindos da API no React?

Compartilhe este tutorial

Continue aprendendo:

Como sincronizar estado local com dados vindos de uma API no React?

Aprenda a sincronizar o estado local de um aplicativo React com dados de APIs externas.

Tutorial anterior

Como utilizar React Query para otimizar chamadas de API no React?

Aprenda a utilizar React Query para gerenciar e otimizar chamadas de API no seu projeto React.

Próximo tutorial