> 웹 프론트엔드 > JS 튜토리얼 > Axios 및 React-TanStack-Query를 사용하여 Next.js에서 데이터를 가져오는 완전한 가이드

Axios 및 React-TanStack-Query를 사용하여 Next.js에서 데이터를 가져오는 완전한 가이드

Patricia Arquette
풀어 주다: 2025-01-20 06:28:08
원래의
474명이 탐색했습니다.

A Complete Guide to Fetching Data in Next.js with Axios and React-TanStack-Query

솔직히 말하자면, fetchuseState과 함께 useEffect API에 익숙할 것입니다. 작동하지만 빠르게 다루기 어려워집니다. 오류 처리? 자질구레한 일. 캐싱? 악몽. 데이터 업데이트를 관리하시나요? 잊어버리세요!

하지만 데이터 가져오기가 더 간단해질 수 있다면 어떨까요? AxiosReact-TanStack-Query를 입력하면 데이터 관리를 저글링 작업에서 원활하고 효율적인 프로세스로 전환할 수 있습니다.

영화 목록 앱을 생각해 보세요. 반복적인 코드 대신 이러한 도구를 사용하면 기능 구축에 집중할 수 있습니다. 업그레이드할 준비가 되셨나요? 시작해 보세요!


왜 버리는가 fetch useState useEffect?

솔루션을 살펴보기 전에 기존 접근 방식의 한계를 검토해 보겠습니다.

  1. 중복성: 각 데이터 가져오기에는 상태 로드, 오류 처리 및 가져오기 호출 자체를 위한 반복 코드가 포함됩니다.
  2. 캐싱 비효율성: fetch은 본질적으로 데이터를 캐시하지 않습니다. 페이지로 다시 이동한다는 것은 모든 것을 다시 가져오는 것을 의미합니다.
  3. 수동 다시 가져오기: 데이터 업데이트를 다시 로드하려면 수동 개입이 필요합니다.

이러한 문제를 해결해 보겠습니다.


1단계: Axios 및 React-TanStack-Query 설치

프로젝트에 다음 패키지를 추가하세요.

<code class="language-bash">npm install axios @tanstack/react-query</code>
로그인 후 복사
로그인 후 복사

다음으로 데이터 관리를 위한 도우미인 쿼리 클라이언트를 구성하세요.

<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>
로그인 후 복사

이것이 바로 설정입니다. 데이터를 가져오세요!


React-TanStack-Query로 데이터 가져오기

React-TanStack-Query를 사용하여 간단한 가져오기 예제를 리팩토링해 보겠습니다. 영화 목록을 가져오는 영화 앱을 구축하겠습니다.

전통적인 접근 방식(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>
로그인 후 복사

이제 React-TanStack-Query로 이를 간소화해 보겠습니다.

향상된 접근 방식(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>
로그인 후 복사

설명

  1. useQuery: 이 후크는 가져오기, 캐싱 및 오류 관리를 처리하므로 더 이상 수동으로 useState 또는 useEffect!
  2. 할 필요가 없습니다.
  3. 자동 다시 가져오기: 데이터는 수동 개입 없이 최신 상태로 유지됩니다.
  4. Axios 통합: Axios는 기본 fetch API에 비해 데이터 가져오기를 단순화합니다.

Axios 사용자 정의

실제 앱에는 헤더, 기본 URL 또는 인증 토큰이 필요한 경우가 많습니다. 재사용 가능한 Axios 인스턴스를 만듭니다.

<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>
로그인 후 복사

쿼리에서 다음 인스턴스를 사용하세요.

<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>
로그인 후 복사

React-TanStack-Query의 장점

업그레이드할 가치가 있는 이유는 다음과 같습니다.

  1. 내장 캐싱: 불필요한 다시 가져오기를 방지하기 위해 데이터가 캐시됩니다.
  2. 단순화된 오류 처리: 더 이상 복잡한 try/catch 블록이 없습니다.
  3. 부실 재검증: 백그라운드에서 업데이트를 가져오는 동안 캐시된 데이터를 표시합니다.
  4. 광범위한 사용자 정의: 가져오기, 폴링, 재시도 등을 쉽게 조정할 수 있습니다.

보너스: 페이지 매김 예시

페이지가 매겨진 API 처리는 간단합니다.

<code class="language-bash">npm install axios @tanstack/react-query</code>
로그인 후 복사
로그인 후 복사

결론

React-TanStack-Query를 채택하는 것은 고성능 시스템으로 업그레이드하는 것과 같습니다. 캐싱, 오류 처리 및 다시 가져오기를 처리하므로 뛰어난 기능을 구축하는 데 집중할 수 있습니다. 반복되는 코드에 지치셨다면 한번 시도해 보세요. 후회하지 않으실 거예요!

위 내용은 Axios 및 React-TanStack-Query를 사용하여 Next.js에서 데이터를 가져오는 완전한 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿