Existem várias formas de realizar requisições HTTP no React. Abaixo, exploramos algumas opções, incluindo vantagens e desvantagens de cada abordagem.
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;
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;
fetch
.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;
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;
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;