Explicação do Código
1. Importação de Dependências 📦
import { useState, useEffect } from "react";
Aqui, estamos importando useState
e useEffect
do React. O useState
é usado para gerenciar o estado dos dados e do erro no hook, enquanto o useEffect
executa a função de requisição fetch
sempre que a URL muda.
2. Definição do Hook useFetch
📡
const useFetch = (url) => {
Este é o nosso hook customizado chamado useFetch
. Ele recebe uma url
como parâmetro, que é a URL de onde os dados serão buscados. O hook irá retornar os dados e quaisquer erros que possam ocorrer durante o processo de requisição.
3. Definição dos Estados 🏗️
const [data, setData] = useState([]);
const [error, setError] = useState(null);
Aqui, estamos criando dois estados com useState
:
data
: Armazena os dados que serão retornados pela requisição.error
: Armazena qualquer erro que possa ocorrer durante a execução da requisição.
O estado data
é inicializado como um array vazio, enquanto error
é inicializado como null
.
4. Uso do useEffect
para Requisição de Dados 🔄
useEffect(() => {
fetch(url)
.then((response) => response.json())
.then((data) => setData(data))
.catch((error) => setError(error));
}, [url]);
Dentro do useEffect
, que é um hook que executa código quando um componente é montado ou quando algum valor do estado ou props muda, estamos fazendo a requisição fetch
:
fetch(url)
: Envia uma requisição HTTP para a URL fornecida..then((response) => response.json())
: Quando a resposta chega, ela é convertida para o formato JSON..then((data) => setData(data))
: Após a conversão para JSON, os dados são armazenados no estadodata
..catch((error) => setError(error))
: Se ocorrer algum erro durante o processo, ele é capturado e armazenado no estadoerror
.
O useEffect
depende da url
. Isso significa que sempre que a URL mudar, o hook será acionado novamente, realizando uma nova requisição.
5. Retorno do Hook 🔙
return { data, error };
O hook useFetch
retorna um objeto contendo:
data
: Os dados retornados pela requisição.error
: O erro, caso tenha ocorrido.
Esses valores podem ser usados em qualquer componente que chamar o hook.
6. Exportação do Hook 🏷️
export default useFetch;
Finalmente, o hook useFetch
é exportado para que possa ser utilizado em outros componentes da aplicação.
Código Completo 📜
import { useState, useEffect } from "react";
const useFetch = (url) => {
const [data, setData] = useState([]);
const [error, setError] = useState(null);
useEffect(() => {
fetch(url)
.then((response) => response.json())
.then((data) => setData(data))
.catch((error) => setError(error));
}, [url]);
return { data, error };
};
export default useFetch;