使用 Axios 和 React-TanStack-Query 在 Next.js 中取得資料的完整指南
說實話:您可能熟悉 fetch
API,以及 useState
和 useEffect
。它可以工作,但很快就會變得笨拙。錯誤處理? 一件苦差事。快取?一場惡夢。 管理資料更新?忘了它吧!
但是如果資料取得可以更簡單怎麼辦? 輸入 Axios 和 React-TanStack-Query,將資料管理從複雜的行為轉變為平穩、高效的過程。
考慮一個電影列表應用程式。這些工具可以讓您專注於建立功能,而不是重複的程式碼。準備好升級了嗎?讓我們開始吧!
為什麼要放棄fetch
useState
useEffect
?
在深入研究解決方案之前,讓我們先回顧一下傳統方法的限制:
- 冗餘:每次資料取得都涉及載入狀態、錯誤處理和取得呼叫本身的重複程式碼。
-
快取效率低:
fetch
本身並不會快取資料。導航回頁面意味著重新獲取所有內容。 - 手動重新取得:資料更新需要手動介入才能觸發重新載入。
讓我們來解決這些問題。
第 1 步:安裝 Axios 和 React-TanStack-Query
將這些包裝加入您的專案:
npm install axios @tanstack/react-query
接下來,設定一個查詢客戶端,一個用於管理資料的助理:
// /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> ); }
// /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> ); }
這就是設定。讓我們來取得一些數據!
使用 React-TanStack-Query 取得資料
讓我們使用 React-TanStack-Query 重構一個簡單的取得範例。 我們將建立一個電影應用程式來獲取電影列表:
傳統方法 (fetch
useState
useEffect
)
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> ); }
現在,讓我們使用 React-TanStack-Query 來簡化這個過程。
改進的方法(React-TanStack-Query)
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> ); }
說明
useQuery
: 此鉤子處理取得、快取和錯誤管理 - 不再需要手動useState
或useEffect
!- 自動重新取得:資料保持最新狀態,無需手動幹預。
- Axios 整合: 與原生
fetch
API 相比,Axios 簡化了資料擷取。
自訂 Axios
現實世界的應用程式通常需要標頭、基本 URL 或身份驗證令牌。 建立可重複使用的 Axios 實例:
// 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;
在查詢中使用此實例:
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
React-TanStack-Query 的好處
這就是為什麼它值得升級:
- 內建快取:資料被緩存,避免不必要的重新取得。
- 簡化的錯誤處理:不再需要複雜的
try/catch
塊。 - Stale-While-Revalidate: 在背景取得更新時顯示快取資料。
- 廣泛的自訂:輕鬆調整獲取、輪詢、重試等。
獎勵:分頁範例
處理分頁 API 非常簡單:
npm install axios @tanstack/react-query
結論
採用 React-TanStack-Query 就像升級到高效能係統一樣。 它處理快取、錯誤處理和重新獲取,使您能夠專注於建立卓越的功能。 如果您厭倦了重複的程式碼,請嘗試一下。你不會後悔的!
以上是使用 Axios 和 React-TanStack-Query 在 Next.js 中取得資料的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務
