Maison >interface Web >js tutoriel >Un guide complet pour récupérer des données dans Next.js avec Axios et React-TanStack-Query
Soyons honnêtes : vous connaissez probablement l'API fetch
, couplée à useState
et useEffect
. Cela fonctionne, mais devient vite lourd. Gestion des erreurs ? Une corvée. Mise en cache ? Un cauchemar. Gérer les mises à jour des données ? Oubliez ça !
Mais et si la récupération de données pouvait être plus simple ? Entrez Axios et React-TanStack-Query, transformant la gestion des données d'un acte de jonglage en un processus fluide et efficace.
Envisagez une application de liste de films. Au lieu d'un code répétitif, ces outils vous permettent de vous concentrer sur la création de fonctionnalités. Prêt pour une mise à niveau ? Commençons !
fetch
useState
useEffect
?Avant de plonger dans les solutions, passons en revue les limites de l'approche traditionnelle :
fetch
ne met pas automatiquement en cache les données. Revenir à une page signifie tout récupérer.Abordons ces problèmes.
Ajoutez ces packages à votre projet :
<code class="language-bash">npm install axios @tanstack/react-query</code>
Ensuite, configurez un Query Client, un assistant pour gérer vos données :
<code class="language-javascript">// /components/providers/QueryProvider.jsx "use client" import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; const queryClient = new QueryClient(); export default function QueryProvider({ children }) { return ( <QueryClientProvider client={queryClient}> {children} </QueryClientProvider> ); }</code>
<code class="language-javascript">// /layout.jsx import localFont from "next/font/local"; import "./globals.css"; import QueryProvider from "../components/providers/QueryProvider"; const geistSans = localFont({ src: "./fonts/GeistVF.woff", variable: "--font-geist-sans", weight: "100 900", }); const geistMono = localFont({ src: "./fonts/GeistMonoVF.woff", variable: "--font-geist-mono", weight: "100 900", }); export const metadata = { title: "Tanstack Query with axios", description: "Generated by create next app", }; export default function RootLayout({ children }) { return ( <QueryProvider>{children}</QueryProvider> ); }</code>
C'est la configuration. Récupérons quelques données !
Refactorisons un exemple de récupération simple en utilisant React-TanStack-Query. Nous allons créer une application de film récupérant une liste de films :
fetch
useState
useEffect
)<code class="language-javascript">import { useEffect, useState } from "react"; export default function Movies() { const [movies, setMovies] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetch("https://api.example.com/movies") .then(res => res.json()) .then(data => { setMovies(data); setLoading(false); }) .catch(err => { setError(err); setLoading(false); }); }, []); if (loading) return <p>Loading movies...</p>; if (error) return <p>Error loading movies: {error.message}</p>; return ( <ul> {movies.map(movie => ( <li key={movie.id}>{movie.title}</li> ))} </ul> ); }</code>
Maintenant, rationalisons cela avec React-TanStack-Query.
<code class="language-javascript">import { useQuery } from "@tanstack/react-query"; import axios from "axios"; const fetchMovies = async () => { const response = await axios.get("https://api.example.com/movies"); return response.data; }; export default function Movies() { const { data: movies, error, isLoading } = useQuery(["movies"], fetchMovies); if (isLoading) return <p>Loading movies...</p>; if (error) return <p>Error loading movies: {error.message}</p>; return ( <ul> {movies.map(movie => ( <li key={movie.id}>{movie.title}</li> ))} </ul> ); }</code>
useQuery
: Ce hook gère la récupération, la mise en cache et la gestion des erreurs – plus besoin de manuel useState
ou useEffect
!fetch
API native.Les applications du monde réel nécessitent souvent des en-têtes, des URL de base ou des jetons d'authentification. Créez une instance Axios réutilisable :
<code class="language-javascript">// utils/axios.js import axios from "axios"; const axiosInstance = axios.create({ baseURL: "https://api.example.com", headers: { Authorization: `Bearer ${process.env.API_TOKEN}`, }, }); export default axiosInstance;</code>
Utilisez cette instance dans votre requête :
<code class="language-javascript">import { useQuery } from "@tanstack/react-query"; import axiosInstance from "../utils/axios"; const fetchMovies = async () => { const response = await axiosInstance.get("/movies"); return response.data; }; // ... rest of the Movies component remains the same</code>
Voici pourquoi c'est une mise à niveau intéressante :
try/catch
complexes.La gestion des API paginées est simple :
<code class="language-bash">npm install axios @tanstack/react-query</code>
Adopter React-TanStack-Query, c'est comme passer à un système hautes performances. Il gère la mise en cache, la gestion des erreurs et la récupération, vous permettant de vous concentrer sur la création de fonctionnalités exceptionnelles. Si vous en avez assez du code répétitif, essayez-le. Vous ne le regretterez pas !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!