Aula 7

React

Requisições HTTP

Requisições HTTP no React

Existem várias formas de realizar requisições HTTP no React. Abaixo, exploramos algumas opções, incluindo vantagens e desvantagens de cada abordagem.

1. Usando fetch nativo do JavaScript

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

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

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then((response) => response.json())
      .then((data) => setData(data))
      .catch((error) => console.error('Error fetching data:', error));
  }, []);

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

export default App;

        

Vantagens

Desvantagens

2. Usando axios

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

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

  useEffect(() => {
    axios.get('https://api.example.com/data')
      .then((response) => setData(response.data))
      .catch((error) => console.error('Error fetching data:', error));
  }, []);

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

export default App;

        

Vantagens

Desvantagens

3. Usando react-query (TanStack Query)

import React from 'react';
import { useQuery } from '@tanstack/react-query';

const App = () => {
  const { data, isLoading, error } = useQuery(['data'], () =>
    fetch('https://api.example.com/data').then((res) => res.json())
  );

  if (isLoading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;

  return (
    <div>
      <h1>Data:</h1>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
}

export default App;

        

Vantagens

Desvantagens

4. Usando useEffect com Context API ou Redux

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

const DataContext = createContext();

export const DataProvider = ({ children }) => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then((response) => response.json())
      .then((data) => setData(data));
  }, []);

  return {children};
}

export function useData() {
  return useContext(DataContext);
}

const App = () => {
  const data = useData();

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

export default App;

        

Vantagens

Desvantagens

5. Usando SWR

import useSWR from 'swr';

const fetcher = (url) => fetch(url).then((res) => res.json());

const App = () => {
  const { data, error } = useSWR('https://api.example.com/data', fetcher);

  if (error) return <div>Error: {error.message}</div>;
  if (!data) return <div>Loading...</div>;

  return (
    <div>
      <h1>Data:</h1>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
}

export default App;

        

Vantagens

Desvantagens

Exercício para fazer em aula

Faça um componente Dog e DogCards com requisições utilizando esse codigo de base: Clique aqui