首頁 > web前端 > js教程 > 主體

Next.js 中的客戶端與伺服器元件

DDD
發布: 2024-09-13 06:23:35
原創
635 人瀏覽過

Client vs Server Components in Next.js

在此版本的Next.js 中,我們將探討什麼是客戶端和伺服器元件、它們的差異、何時使用每個元件,並提供實際範例來幫助您在自己的應用程式中實現它們。專案.

Next.js 中的客戶端和伺服器元件是什麼?

在 Next.js 中,客戶端元件伺服器元件 之間有明顯的差異。這種分離使您能夠更好地決定在何處以及如何處理程式碼,從而直接影響效能和使用者體驗。

客戶端組件

客戶端元件在瀏覽器中運行,允許互動和存取瀏覽器 API(如視窗或文件)。它們非常適合管理應用程式的動態介面和響應用戶操作。

主要特點:

  • 在瀏覽器(客戶端)中運作。
  • 可以存取 useState 或 useEffect 等鉤子。
  • 用於處理動態交互,例如表單或按鈕。
  • 當您需要快速回應使用者操作時必不可少。

客戶端組件範例:

'use client'; // Indicates that this component runs on the client

import { useState } from 'react';

export default function ClientComponent() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>Client-side Counter</h1>
      <p>The count value is: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}
登入後複製

這個經典範例是一個允許使用者直接與頁面互動的計數器。 「使用客戶端」;指令告訴 Next.js 該元件應該在瀏覽器中執行。

伺服器元件

伺服器元件是 Next.js 架構中的一項新功能。這些元件在伺服器上進行處理,並將已呈現的 HTML 傳送到瀏覽器。這減少了到達客戶端的 JavaScript 數量,從而加快了初始頁面載入速度。

主要特點:

  • 在伺服器上渲染。
  • 無權存取瀏覽器 API(如 window 或 document),也無權存取 React hook(如 useState)。
  • 可以直接與資料庫或外部API互動。
  • 透過向客戶端發送 HTML 而不是 JavaScript 來優化效能。

伺服器組件範例:

export default async function ServerComponent() {
  const data = await fetch('https://api.example.com/data').then(res => res.json());

  return (
    <div>
      <h1>Data from the Server</h1>
      <p>{data.message}</p>
    </div>
  );
}
登入後複製

在此範例中,元件在伺服器上呈現,從 API 檢索數據,然後傳回呈現的 HTML。這意味著資料獲取邏輯不會到達客戶端,從而提高了效能。

Next.js 中的新功能

Next.js 改進了伺服器和客戶端元件的互動方式。以下是一些最顯著的改進:

1. 預設的伺服器元件

元件現在預設為伺服器元件。這意味著您的應用程式會透過向瀏覽器發送更少的 JavaScript 來自動優化,除非您明確需要 客戶端元件

2. 優化串流媒體

流允許組件分段加載。這對於大型或資料量大的頁面非常有用,因為頁面的各個部分可以在準備就緒時加載,而無需等待所有內容可用。

3. 精細控制

Next.js 可以更輕鬆地決定元件是在伺服器上運行還是在客戶端上運行,讓您更好地控制如何最佳化應用程式。

4. 改善水分

Hydration 是將伺服器傳送的靜態 HTML 轉換為客戶端上的互動頁面的過程。借助 Next.js,水合作用更有效率且更具選擇性,僅在絕對必要時進行。

何時使用客戶端元件與伺服器元件

在以下情況下使用客戶端元件:

  1. 使用者互動:當您需要處理即時回應的表單或按鈕等互動時。
  2. 狀態管理:非常適合管理動態變化的本地狀態,例如購物車。
  3. 動畫和視覺效果:依賴根據使用者互動更新的動畫或效果時。

在以下情況下使用伺服器元件:

  1. 資料庫查詢:當您需要在顯示內容之前從資料庫取得資料時。
  2. 靜態內容:內容不常變更且不需要互動時的理想選擇。
  3. SEO 改進:搜尋引擎更容易存取伺服器渲染的內容,從而增強 SEO。

組合客戶端和伺服器元件的範例:

// ServerComponent.tsx
export default async function ServerComponent() {
  const data = await fetch('https://api.example.com/products').then(res => res.json());

  return (
    <div>
      <h1>Product List (Server-rendered)</h1>
      <ul>
        {data.map((product: any) => (
          <li key={product.id}>{product.name}</li>
        ))}
      </ul>
    </div>
  );
}

// ClientComponent.tsx
'use client';

import { useState } from 'react';

export default function ClientComponent() {
  const [search, setSearch] = useState('');

  return (
    <div>
      <input
        type="text"
        value={search}
        onChange={(e) => setSearch(e.target.value)}
        placeholder="Search product"
      />
      <p>Searching for: {search}</p>
    </div>
  );
}
登入後複製

在此範例中,伺服器呈現產品清單並將其傳送至客戶端,而搜尋元件則在客戶端進行互動和管理。

Abschluss

Next.js stellt einen Wendepunkt in der Art und Weise dar, wie wir Webanwendungen entwickeln und sowohl die Leistung als auch das Benutzererlebnis optimieren. Durch den effizienten Einsatz von Serverkomponenten und Clientkomponenten können Sie schnelle, dynamische Anwendungen mit einer geringeren Anfangslast erstellen.

Die richtige Wahl zwischen einer Serverkomponente und einer Clientkomponente ist entscheidend, um die Funktionen des Frameworks voll auszuschöpfen. Mit diesen neuen Verbesserungen ist es einfacher, fundierte Entscheidungen zu treffen und Anwendungen zu erstellen, die nicht nur schnell, sondern auch interaktiv und skalierbar sind.

以上是Next.js 中的客戶端與伺服器元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板