Next.js 15 提供用於資料取得的伺服器和用戶端元件,每個元件在效能、SEO 和行為方面都有獨特的優點和缺點。 Axios 因其簡單性而成為流行的選擇,在兩者中都能有效地工作。本指南探討了 Axios 在兩種組件類型中的使用,並強調了關鍵差異和最佳實踐。
Feature | Server Component | Client Component |
---|---|---|
Rendering Location | Server-side, before HTML delivery. | Client-side, post-page load. |
SEO Impact | SEO-friendly; data in initial HTML. | Not SEO-friendly; client-side data fetch. |
View Source Data | Data visible in HTML source. | Data fetched dynamically; not in source. |
Reactivity | Non-reactive; for static data. | Reactive; ideal for interactive UIs. |
伺服器元件在伺服器端渲染期間取得資料。 這透過將數據直接包含在 HTML 中來改善 SEO。
範例:伺服器端資料取得
<code class="language-typescript">// app/server-component-example/page.tsx import axios from 'axios'; interface Post { id: number; title: string; body: string; } const fetchPosts = async (): Promise<Post[]> => { const { data } = await axios.get<Post[]>('https://jsonplaceholder.typicode.com/posts'); return data; }; export default async function ServerComponentExample() { const posts = await fetchPosts(); return ( <div> <h1>Server-Fetched Posts</h1> <ul> {posts.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> </div> ); }</code>
主要考慮因素:
客戶端元件在頁面載入到瀏覽器後取得資料。 這種方法不利於 SEO,但可以實現動態更新。
範例:客戶端資料取得
<code class="language-typescript">'use client'; import axios from 'axios'; import { useEffect, useState } from 'react'; interface Post { id: number; title: string; body: string; } export default function ClientComponentExample() { const [posts, setPosts] = useState<Post[]>([]); const [loading, setLoading] = useState(true); useEffect(() => { const fetchPosts = async () => { try { const { data } = await axios.get<Post[]>('https://jsonplaceholder.typicode.com/posts'); setPosts(data); } catch (error) { console.error('Error fetching posts:', error); } finally { setLoading(false); } }; fetchPosts(); }, []); if (loading) return <div>Loading...</div>; return ( <div> <h1>Client-Fetched Posts</h1> <ul> {posts.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> </div> ); }</code>
主要考慮因素:
Use Case | Recommended Component |
---|---|
SEO-critical data (blog posts) | Server Component |
User-specific or dynamic data | Client Component |
Frequently updated data | Client Component |
Static, rarely changing data | Server Component |
try...catch
區塊進行穩健的錯誤管理。 Axios 在 Next.js 15 中提供了一種靈活且直接的資料擷取方法。透過利用伺服器和客戶端元件的獨特功能並遵循最佳實踐,開發人員可以建立高效能、安全且 SEO 優化的應用程式。 請記住優先考慮靜態和 SEO 關鍵數據的伺服器元件,以及動態用戶互動的用戶端元件。 始終實施徹底的錯誤處理和安全措施。
以上是在 Next.js 中使用 Axios 取得資料完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!