Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

04D

01H

08M

29S

7

Fetch a cualquier API Custom Hook

Que tal si hacemos un hook para cualquier llamado fetch api?
Ademas, lo vamos a hacer con manejo de errores y loading

/src/hooks/fetchApiHook.js

// /fetchApiHook.jsimport { useState, useEffect } from 'react';exportconst useFetchData = (BASE_URL = '', error_msg = 'An error has ocurred getting the data') => {
    const [fetch_data, setFetchData] = useState([]);
    const [loading, setLoading] = useState(false);
    const [error, setError] = useState('');

    useEffect(() => {
        const fetchData = async () => {
            setLoading(true);
            //Pedimos los datos a la apitry {
                const response = awaitwindow.fetch(BASE_URL);
                if (!response.ok) {
                    thrownewError(`Http status ${response.status}`);
                }
                const data = await response.json();
                console.log(data);
                setFetchData(data.results);
            } catch (error) {
//Si hay un error ...console.error(error.message);
                setError(error_msg)
            }
            setLoading(false);
        }
        fetchData();
    }, [BASE_URL]); //Hacer enfasis en la url//Retornamos nuestro fetch_data como data, nuestro loading y errorreturn { data: fetch_data, loading, error };
}

Ahora en el componente al cual queremos aplicar nuestro Custom Hook

import React  from"react";
//Impotamos nuestro custom hookimport { useFetchData } from"../hooks/useFetchData";
exportconst Component = () => { 
	const BASE_URL = 'aqui el url de su api';
	const { data, loading, error } = useFetchData(BASE_URL); // Guardamos las variables que nos retorna nuestro custom hook, pasanadole como parametro la url de la api, el mensaje del error es opcionalif (loading) return"Loading ...";
	if (error) return`Error ${error}`;
	return(
	//Un ejemplo de como mostrar los datos
		{data.map((element) => (
         		 <pkey={element.id}>{element.name}</p>
        	))}
         	
	)
}

No olvides dejar tus dudas y aportes
Buena suerte

Escribe tu comentario
+ 2
1
43434Puntos

Hola Mateo!

Esta muy bueno tu custom hook!!!
Muchas gracias por enriquecer la comunidad con tu aporte 🙌🏽