Maison  >  Questions et réponses  >  le corps du texte

Utiliser useFetch pour conserver les données mises en cache dans Nuxt3

J'ai rencontré le problème suivant lors de l'utilisation de nuxt3.

Cela semble se produire car l'appel API au nouveau slug n'est jamais effectué.

Mon [slug.vue]fichier ressemble à ceci :

<script setup lang="ts">
import { ref } from 'vue';
const route = useRoute();

const slug = ref(String(route.params.slug));
console.log(slug.value);
const apicall = `https://swapi.dev/api/people/${slug.value}`;
const { data: article } = await useFetch(
  `https://swapi.dev/api/people/${slug.value}`
);
</script>
<template>
  <div>
    <NuxtLink to="/">Back to Home</NuxtLink>
    <pre>
      {{ `https://swapi.dev/api/people/${slug}` }}
      {{ route.params.slug }}
      {{ article }}
    </pre>
  </div>
</template>

L'intégralité de la configuration peut être vue sur stackblitz : https://stackblitz.com/edit/nuxt-starter-mkgfrw?file=pages%2F[slug].vue,pages%2Findex.vue

P粉547420474P粉547420474321 Il y a quelques jours807

répondre à tous(2)je répondrai

  • P粉523625080

    P粉5236250802023-11-04 11:11:07

    Par défaut, useFetch, useLazyFetch, useAsyncData et useLazyAsyncData mettent tous en cache la charge utile de réponse initiale initialement récupérée dans la session de navigateur en cours, donc aucune requête ultérieure inutile n'est effectuée. (Du moins, je suppose que c'est l'idée derrière tout ça)

    Vous pouvez modifier le comportement par défaut de chaque composable récupéré en passant l'option "initialCache" et en la définissant sur "false".

    Voir : https://v3.nuxtjs.org/api/composables/use-async-data#params

    répondre
    0
  • P粉464082061

    P粉4640820612023-11-04 10:51:20

    Suivez les conseils dans les commentaires ci-dessus et consultez la documentation ici : https://v3.nuxtjs.org/guide/features/data-fetching/#refreshing-dataJ'ai essayé le code suivant qui a fonctionné

    const { data: article, refresh } = await useFetch(
      `https://swapi.dev/api/people/${slug.value}`
    );
    
    watchEffect(() => {
      refresh();
    });

    Exemple de travail ici : https://stackblitz.com/edit/nuxt-starter-mkgfrw?file=pages%2F[slug].vue,app.vue

    répondre
    0
  • Annulerrépondre