De fleste applikasjonene vi lager i dag bruker data fra eksterne kilder gjennom APIer. De henter data fra en server og viser dem i brukergrensesnittet.
Ved å bruke React kan du lage en tilpasset hook for å hente data fra et API. Gitt en URL, vil denne kroken returnere et objekt som inneholder dataene og en valgfri feilmelding. Du kan deretter bruke denne kroken i en komponent.
Opprette en Custom React Hook
Begynn med å lage en ny fil kalt useFetch.js. I denne filen oppretter du en funksjon kalt useFetch() som godtar en URL-streng som en parameter.
konst useFetch = (url) => {
}
Kroken skal foreta API-kallet umiddelbart etter at den er ringt. Du kan bruke useEffect() krok for dette.
For de faktiske API-kallene, bruk hente-APIen. Denne APIen er et løftebasert grensesnitt som lar deg komme med forespørsler og motta svar over HTTP asynkront.
I useFetch() tilpasset krok legger du til følgende.
import { useEffect, useState } fra "reagere";
konst useFetch = (url) => {
konst [data, setdata] = brukState(null);
konst [loading, setloading] = useState(ekte);
const [feil, seterror] = useState("");useEffect(() => {
hente (url)
.then((res) => res.json())
.then((data) => {
seterror(data.feil)
angi data(data.vits)
setloading(falsk)
})
}, [url]);komme tilbake { data, loading, error };
};
eksportmisligholde useFetch;
I denne kroken initialiserer du først tilstanden til tre verdier:
- data: Beholder API-svaret.
- feil: Beholder en feilmelding hvis det oppstår en feil.
- loading: Inneholder en boolsk verdi som indikerer om den har hentet API-dataene. Initialiser innlastingstilstanden til sann. Når API-en returnerer data, setter du den til usann.
UseEffect()-kroken tar URL-strengen som et argument. Dette er for å sikre at den kjører hver gang URL-en endres.
UseFetch()-funksjonen vil returnere et objekt som inneholder data, lasting og feilverdier.
Bruke en React Custom Hook
For å bruke useFetch() egendefinerte kroken du nettopp opprettet, begynner du med å importere den:
konst useFetch = krever("./useFetch")
Bruk den deretter som følger:
konst {data, loading, error} = useFetch (url)
For å demonstrere, vurder følgende vitser-komponent:
konst Vitser = () => {
const url = "<https://sv443.net/jokeapi/v2/joke/Programming? type=single>";
konst { data, loading, error } = useFetch (url);hvis (laster) komme tilbake (
<div>Laster inn...</div>
)komme tilbake (
<div>
{feil &&<div>{feil}</div>}
{data &&<div>{<div>{data}</div>}</div>}
</div>
);
};
eksportmisligholde Vitser;
Den kaller useFetch()-kroken med URL-en til jokes API og mottar data-, lasting- og feilverdier.
For å gjengi Jokes-komponenten, sjekk først om Loading er sant. Hvis det er det, vis en "Loading..."-setning ellers gjengi dataene og feilmeldingen hvis noen.
Hvorfor bruke Custom React Hooks?
Akkurat som du brukte useFetch() tilpasset krok i denne komponenten, kan du gjenbruke den igjen i andre komponenter. Det er det fine med å eksternalisere logikken i kroker i stedet for å skrive den i hver komponent.
Hooks er en kraftig funksjon i React som du kan bruke til å forbedre modulariteten til koden din.