quarta-feira, novembro 27, 2024
Home Programação Fetch de dados em React

Fetch de dados em React

A importância de se fazer Fetch de dados em React

Fazer o fetch de dados de uma API no React Hooks é importante por várias razões:

  1. Reutilização de código: Ao criar um hook personalizado para realizar solicitações de API, você pode reutilizar esse código em vários componentes da sua aplicação, o que é muito útil em aplicações de tamanho médio ou grande.
  2. Gerenciamento de estado centralizado: Ao usar hooks para gerenciar o estado da solicitação de API, você pode mantê-lo de forma centralizada e fácil de gerenciar, o que é útil quando a lógica de gerenciamento de estado é complexa.
  3. Melhor separação de preocupações: Ao fazer o fetch de uma API no hook, você pode se concentrar no que realmente importa – a lógica da sua aplicação – e deixar que o hook cuide dos detalhes da solicitação de API.
  4. Maior legibilidade do código: Ao usar hooks para gerenciar o estado da solicitação de API, o código fica mais claro e fácil de entender, pois a lógica de gerenciamento de estado é isolada em um único lugar.

Algumas formas de se fazer Fetch de dados em React

Uma forma de realizar o fetch de dados de uma API no React Hooks é utilizando o hook “useEffect” juntamente com o método “fetch”. Aqui está um exemplo de como isso pode ser feito:

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

const App = () => {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    const fetchData = async () => {
      setLoading(true);
      const response = await fetch('https://api.example.com/data');
      const json = await response.json();
      setData(json);
      setLoading(false);
    };
    fetchData();
  }, []);

  return (
    <div>
      {loading ? (
        <div>Loading...</div>
      ) : (
        data && <pre>{JSON.stringify(data, null, 2)}</pre>
      )}
    </div>
  );
};

export default App;

Neste exemplo, o hook “useEffect” é utilizado para realizar a chamada da API assíncrona quando o componente é montado pela primeira vez. A resposta da API é armazenada no estado “data” e o estado “loading” é usado para indicar se a solicitação de API está em andamento ou não.

Outra forma de realizar o fetch de dados de uma API no React Hooks é utilizando o hook “useState” e o “useReducer”. Aqui está um exemplo de como isso pode ser feito:

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

const dataFetchReducer = (state, action) => {
  switch (action.type) {
    case 'FETCH_INIT':
      return { ...state, isLoading: true, isError: false };
    case 'FETCH_SUCCESS':
      return { ...state, isLoading: false, isError: false, data: action.payload };
    case 'FETCH_FAILURE':
      return { ...state, isLoading: false, isError: true };
    default:
      throw new Error();
  }
};

const useDataApi = (initialUrl, initialData) => {
  const [url, setUrl] = useState(initialUrl);

  const [state, dispatch] = useReducer(dataFetchReducer, {
    isLoading: false,
    isError: false,
    data: initialData,
  });

  useEffect(() => {
    let didCancel = false;

    const fetchData = async () => {
      dispatch({ type: 'FETCH_INIT' });

      try {
        const result = await axios(url);

        if (!didCancel) {
          dispatch({ type: 'FETCH_SUCCESS', payload: result.data });
        }
      } catch (error) {
        if (!didCancel) {
          dispatch({ type: 'FETCH_FAILURE' });
        }
      }
    };

    fetchData();

    return () => {
      didCancel = true;
    };
  }, [url]);

  return [state, setUrl];
};

const App = () => {
  const [{ data, isLoading, isError }, doFetch] = useDataApi(
    'https://api.example.com/data',
    null
  );

  return (
    <div>
      {isError && <div>Something went wrong ...</div>}

      {isLoading ? (
        <div>Loading ...</div>
      ) : (
        data && <pre>{JSON.stringify(data, null, 2)}</pre>
      )}

      <button onClick={() => doFetch('https://api.example.com/data')}>
        Fetch Data
      </button>
    </div>
  );
};

export default App;

Neste exemplo, o hook “useState” é utilizado para armazenar a URL da API e o “useReducer” é utilizado para gerenciar o estado do fetch dos dados da API. O estado inclui informações sobre se a solicitação está em andamento, se houve algum erro ou se os dados foram retornados com sucesso.

O dataFetchReducer é um reducer que controla o estado da solicitação de dados da API. Ele é escrito como uma função que recebe o estado atual e uma ação, e retorna um novo estado baseado na ação.

As ações são objetos com uma propriedade type que descreve a ação que está sendo realizada e, opcionalmente, uma propriedade payload que carrega dados adicionais. No exemplo, as ações são:

  • FETCH_INIT: Disparada quando a solicitação de dados começa. Atualiza o estado para indicar que a solicitação está em andamento.
  • FETCH_SUCCESS: Disparada quando a solicitação de dados é bem-sucedida. Atualiza o estado para incluir os dados retornados pela API.
  • FETCH_FAILURE: Disparada quando a solicitação de dados falha. Atualiza o estado para indicar que houve um erro.

O dataFetchReducer atualiza o estado atual de acordo com a ação recebida. Ele é utilizado com o hook useReducer para gerenciar o estado da solicitação de dados da API e para manter o estado gerenciado de forma centralizada em vez de espalhá-lo por todo o componente.

O useDataApi é um hook customizado que combina o useReducer e o useEffect para realizar solicitações de API de forma fácil e gerenciável.

Ele recebe uma URL como entrada e retorna o estado atual da solicitação de API, bem como uma função que pode ser usada para iniciar a solicitação.

Internamente, o hook usa o useReducer com o dataFetchReducer para gerenciar o estado da solicitação de API. O useEffect é usado para iniciar a solicitação de API quando a URL é atualizada.

O hook mantém o estado da solicitação de API gerenciado de forma centralizada e fornece uma interface fácil de usar para fazer solicitações de API no componente. Dessa forma, você pode se concentrar no que realmente importa – a lógica da sua aplicação – e deixar que o hook cuide dos detalhes da solicitação de API.

Aqui está outra forma de realizar o fetch de uma API usando o hook useState:

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

const useDataApi = (initialUrl) => {
  const [data, setData] = useState(null);
  const [url, setUrl] = useState(initialUrl);
  const [isLoading, setIsLoading] = useState(false);
  const [isError, setIsError] = useState(false);

  useEffect(() => {
    const fetchData = async () => {
      setIsError(false);
      setIsLoading(true);

      try {
        const response = await fetch(url);
        const result = await response.json();
        setData(result);
      } catch (error) {
        setIsError(true);
      }

      setIsLoading(false);
    };

    fetchData();
  }, [url]);

  return [{ data, isLoading, isError }, setUrl];
};

Neste exemplo, o hook useDataApi retorna um array com o objeto de estado que inclui os dados retornados pela API, o estado de carregamento e o estado de erro. Ele também retorna uma função setUrl que pode ser usada para atualizar a URL para a qual fazer o fetch.

O hook useEffect é usado para disparar a solicitação de API quando a URL é atualizada. Dentro do useEffect, uma função fetchData é definida que realiza a solicitação de API usando o fetch e atualiza o estado com o resultado.

Este exemplo ilustra como o hook useState pode ser usado para gerenciar o estado da solicitação de API, mas é importante lembrar que esse tipo de gerenciamento de estado é mais fácil de fazer com o useReducer quando a lógica de gerenciamento de estado é mais complexa.

DEIXE UMA RESPOSTA

Por favor entre com seu comentário
Por favor insira o seu nome aqui

Últimos artigos

Entenda o que é refatoração de código

Porque a refatoração de código é tão importante na programação Melhora a qualidade do código: A refatoração ajuda a melhorar a qualidade do código,...

O que são Padrões de Projeto de Software

O que são Padrões de Projeto de Software Design patterns, ou padrões de projeto de software, são soluções comprovadas e testadas para problemas comuns que...

Winston NodeJS Logger

O que são logs de uma aplicação? Basicamente são registros detalhados e estruturados dos eventos ocorridos em sua execução. Eles incluem informações sobre erros, operações...

Vantagens e Desvantagens no uso da API Date e Intl

Antes de mais nada, qual a importância de saber manipular datas na programação É importante saber manipular os objetos Date e Intl em JavaScript porque...

Entendendo biblioteca de requisições HTTP Axios

Primeiramente o que é AXIOS e sua finalidade Axios é uma biblioteca JavaScript que facilita a realização de requisições HTTP (como GET, POST, PUT, DELETE,...