Vue Academy · leksjon

useFetch: Composable for asynkrone data

data-, loading- og error-refs, henting ved mount, refetch-funksjon og opprydding med AbortController.

Leksjon 3 av 413 trinn

useFetch: Composable for asynkrone data er en gratis leksjon i Vue Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Vue Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Vue Academy inneholder totalt 4 leksjoner.

Målet med useFetch

Asynkron datainnhenting gjentas overalt: lastestatus, feilhåndtering og selve forespørselen. useFetch samler dette i én gjenbrukbar composable som returnerer data, loading og error.

De tre reaktive ref-ene

Start med tre refs som beskriver tilstanden til enhver asynkron forespørsel.

import { ref } from "vue";
function useFetch(url) {
  const data = ref(null);
  const loading = ref(false);
  const error = ref(null);
}

Fetch-rutinen

Skriv en asynkron funksjon som setter loading, utfører forespørselen og lagrer resultatet. Vi forbedrer feilhåndteringen i neste trinn.

async function execute() {
  loading.value = true;
  const res = await fetch(url);
  data.value = await res.json();
  loading.value = false;
}

try / catch / finally

Omslutt forespørselen slik at feil havner i error, og at loading alltid tilbakestilles, enten forespørselen lykkes eller mislykkes, i finally.

async function execute() {
  loading.value = true;
  error.value = null;
  try {
    const res = await fetch(url);
    if (!res.ok) throw new Error("HTTP " + res.status);
    data.value = await res.json();
  } catch (e) {
    error.value = e;
  } finally {
    loading.value = false;
  }
}

Hente data i onMounted

Start forespørselen når komponenten monteres, slik at data lastes inn automatisk.

import { onMounted } from "vue";
onMounted(execute);

En refetch-funksjon

Eksponer execute som refetch, slik at brukerne kan laste inn data på nytt ved behov – for eksempel etter en endring eller når de trykker på en knapp for å prøve igjen.

return { data, loading, error, refetch: execute };

AbortController for opprydding

Hvis komponenten avmonteres mens forespørselen pågår, bør du avbryte fetch-kallet for å unngå å sette tilstand på en komponent som ikke lenger finnes. Opprett en AbortController og send med signalet.

const controller = new AbortController();
const res = await fetch(url, { signal: controller.signal });

Avbryte ved avmontering

Avbryt forespørselen som pågår i onUnmounted. Ignorer den tilhørende abort-feilen i catch.

import { onUnmounted } from "vue";
onUnmounted(() => controller.abort());

Den komplette useFetch

Ferdig satt sammen håndterer composablen lasting, feil, ny innlasting og opprydding i én ryddig enhet.

function useFetch(url) {
  const data = ref(null);
  const loading = ref(false);
  const error = ref(null);
  const controller = new AbortController();
  async function execute() {
    loading.value = true; error.value = null;
    try {
      const res = await fetch(url, { signal: controller.signal });
      data.value = await res.json();
    } catch (e) {
      if (e.name !== "AbortError") error.value = e;
    } finally {
      loading.value = false;
    }
  }
  onMounted(execute);
  onUnmounted(() => controller.abort());
  return { data, loading, error, refetch: execute };
}

Bruke den i en komponent

Brukerne viser innhold basert på de tre ref-ene – en spinner mens data lastes inn, en feilmelding ved feil og dataene ellers.

const { data, loading, error } = useFetch("/api/posts");

Mønster for malen

Bruk tilstanden til å velge riktig innhold i malen for å gi en komplett brukeropplevelse.

<p v-if="loading">Loading...</p>
<p v-else-if="error">{{ error.message }}</p>
<ul v-else>
  <li v-for="p in data" :key="p.id">{{ p.title }}</li>
</ul>

Kort kontrollspørsmål

Hvilken rolle har AbortController i useFetch?

Oppsummering

Du bygde useFetch(url), som eksponerer ref-ene data, loading og error, henter data i onMounted med et try/catch/finally-mønster, tilbyr en refetch-funksjon og rydder opp i en AbortController i onUnmounted.

Gratis å komme i gang

Lær deg HTML med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
42
Leksjoner
156

Ofte stilte spørsmål

Er leksjonen «useFetch: Composable for asynkrone data» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Vue Academy, inkludert «useFetch: Composable for asynkrone data», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Vue Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «useFetch: Composable for asynkrone data»?

data-, loading- og error-refs, henting ved mount, refetch-funksjon og opprydding med AbortController. Du øver på Vue Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Vue Academy?

Ingen tidligere erfaring er nødvendig. Vue Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «useFetch: Composable for asynkrone data»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Vue Academy-leksjonen?

Ja. Alle Vue Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hva kjennetegner en god composable?
  2. useCounter: En enkel composable
  3. useFetch: Composable for asynkrone data
  4. VueUse: Composable-biblioteket
← Tilbake til Vue Academy