指南

什麼係 Next.js?畀 app 建構者嘅淺白指南

Next.js 係一個用 React 建網站同網頁 app 嘅框架。React 俾你介面嘅基本積木——按鈕、表格、清單。Next.js 再補上圍繞住呢啲積木嘅網站其他部分:頁面同網址、喺伺服器上渲染頁面令佢一到就可以閱讀、載入資料,以及喺同一個項目入面運行後端程式碼。佢係開源嘅,由 Vercel 公司開發,亦係最多人用嚟建 React 網站嘅方法之一。

用 AI 寫嘢時點解 Next.js 重要

當你向 AI builder 描述一個 app,佢要揀一個技術基礎。呢個選擇會影響你之後最在意嘅嘢:

  • 搜尋能見度。 一個需要喺 Google 排名嘅公開網站,會受惠於送出真正嘅 HTML,而 Next.js 好擅長呢點。
  • 後端放喺邊。 Next.js 令前端頁面同伺服器程式碼(例如「儲存呢張表格」或者「調用付款 API」)可以放喺同一個項目入面。
  • 託管。 有伺服器功能嘅 Next.js app 需要一部伺服器去運行,而純 Vite app 就可以當靜態檔案提供。

Mythex 新項目預設用 Vite + React + TypeScript + Tailwind,當你要求時先用 Next.js——喺第一個提示入面講「用 Next.js」就夠(點樣揀技術)。所以知道幾時值得要求,會有幫助。

日常比喻

如果 React 係一盒高質素嘅樂高積木,咁 Next.js 就係一套已經附埋說明書、底板,以及門同水管零件嘅樂高套裝。

你可以用散裝積木砌同一間屋——只係要自己決定房間點樣接駁、大門喺邊、水點樣入嚟。Next.js 就以標準方式幫你決定呢啲嘢,所以每個 Next.js 項目嘅佈局都差唔多,新嘅開發者(或者 AI)都可以好快搵到路。

Next.js 為 React 加咗咩

功能對你嘅意思
檔案式路由每個頁面就係一個檔案。app/pricing/page.tsx 呢個檔案會變成 /pricing 頁面。唔使額外設定。
伺服器渲染頁面可以喺每次請求時,喺伺服器上建成 HTML,所以顯示得快,搜尋引擎亦讀得到。
靜態生成好少改動嘅頁面可以事先建好一次,然後非常快咁提供。
Server Components(伺服器元件)頁面嘅部分可以只喺伺服器上運行——直接讀取資料庫——然後送出完成嘅 HTML,而唔係程式碼去瀏覽器。
Route handlers 同 server actions後端程式碼,例如 API 端點或者表格處理器,同頁面放喺同一個項目入面。
內建優化圖片縮放、字型載入同程式碼分割都幫你處理好。

Next.js 有兩種組織頁面嘅方式。App Router(app/ 資料夾)係較新嘅一種,支援 Server Components。Pages Router(pages/ 資料夾)係原本嘅方式,目前仍然支援。新項目一般用 App Router。如果你 AI builder 嘅程式碼或者教學睇落陌生,原因通常就係呢度。

實例:一個公開嘅本地咖啡店目錄

想像一個網站,列出你城市嘅咖啡店,每間店一個頁面,並且希望佢喺搜尋結果入面出現。

一間咖啡店嘅 Next.js 頁面大概會咁樣:

// app/cafes/[slug]/page.tsx  →  /cafes/blue-door, /cafes/hilltop ...
export default async function CafePage({ params }) {
  const { slug } = await params;
  const cafe = await db.cafe.findUnique({ where: { slug } });
  return (
    <main>
      <h1>{cafe.name}</h1>
      <p>{cafe.address}</p>
    </main>
  );
}

當有人(或者 Google)瀏覽 /cafes/blue-door,會發生以下嘅事:

  1. Next.js 將網址對應到嗰個檔案。[slug] 資料夾嘅意思係「任何一間咖啡店」。
  2. 元件喺伺服器上運行,從資料庫讀取嗰間咖啡店,並建成 HTML。
  3. 瀏覽器收到一個完整嘅頁面,裡面已經有咖啡店嘅名稱同地址——唔使等 JavaScript 去攞資料。

如果係純客戶端 React app,瀏覽器會先收到一個差唔多空白嘅頁面,然後下載 JavaScript,再攞咖啡店資料,最後先顯示出嚟。搜尋引擎通常都可以處理到,但完整嘅頁面更加可靠。睇吓為 AI 建嘅網站做 SEO。

相比之下,一個登入後先可以用嘅員工儀表板,搜尋引擎本身都睇唔到,所以伺服器渲染帶嚟嘅好處較少,一個較簡單嘅 Vite app 往往更合適。

主要術語

術語意思
框架(Framework)一套有慣例嘅結構,決定一個 app 點樣組織。Next.js 係框架;React 係函式庫。
SSR(伺服器端渲染)每次訪問時,喺伺服器上建頁面嘅 HTML。
SSG(靜態網站生成)喺部署時預先將頁面建成 HTML。
CSR(客戶端渲染)瀏覽器載入後,用 JavaScript 建頁面。典型嘅 Vite + React app 就係咁運作。
SPA(單頁應用程式)只載入一次,然後喺瀏覽器入面切換畫面、唔需要整頁重新載入嘅 app。
Hydration(水合)瀏覽器「啟動」由伺服器送來嘅 HTML,令按鈕同表格變得可以互動。
Route(路由)一個網址路徑,例如 /pricing,連同負責回應佢嘅程式碼。

常見誤解

  • 「Next.js 取代 React。」 唔係。佢係用 React 嘅。你嘅元件仍然係 React 元件。
  • 「Next.js 永遠係更好嘅選擇。」 佢功能更強,但亦需要理解更多嘢。伺服器渲染、快取,以及伺服器同客戶端程式碼嘅分別,都係令人困惑嘅 bug 常見來源。對於大部分內容都放喺登入之後嘅 app,純 React app 往往更簡單。
  • 「Next.js 只可以喺 Vercel 上運行。」 佢係開源嘅,可以喺任何 Node.js 伺服器或者 Docker 容器上運行。如果唔用伺服器功能,亦可以完全靜態輸出。
  • 「用 Next.js 就保證 SEO 好。」 佢令可讀嘅頁面更容易做到。排名仍然取決於標題、內容、速度同連結。
  • 「Next.js 嘅伺服器程式碼自動係私隱嘅。」 標記俾客戶端用嘅程式碼最後會去到瀏覽器。秘密資料必須留喺只限伺服器嘅程式碼入面,並且放喺環境變數。

你可以叫 AI builder 做咩

  • 「用 Next.js 嘅 App Router。」——如果你想用嘅話,放喺第一個提示入面。
  • 「邊啲頁面喺伺服器渲染,邊啲係靜態,邊啲喺瀏覽器運行?點解?」
  • 「令公開嘅營銷頁同清單頁做伺服器渲染或者靜態,並且有正確嘅標題同描述。」
  • 「將 API key 放喺只限伺服器嘅程式碼同環境變數入面,並且話俾我知每個 key 喺邊度被讀取。」
  • 「呢個 app 需要 Next.js 定係 Vite + React 會更簡單?我哋要建嘅係乜嘢?」

Mythex 入面嘅 Next.js

Mythex 預設用 Vite + React + TypeScript + Tailwind,當你喺提示入面要求時就轉用 Next.js;早啲講明會比之後先改慳 credits。你可以喺即時預覽睇到 app,而 Publish 會將佢部署到一個即時網址,唔使你自己設定託管。Mythex 嘅文件提到,客戶端渲染嘅單頁應用程式,SEO 比伺服器渲染或者靜態 HTML 弱,所以如果搜尋好重要,例如係營銷網站,最好一開始就講明(SEO for your app)。

常見問題

簡單嚟講,什麼係 Next.js?

Next.js 係建基於 React 之上嘅框架。React 負責建介面元件;Next.js 就補上圍繞住呢啲元件嘅網站其他部分——頁面同網址、伺服器渲染、資料載入同後端程式碼——等你可以喺一個項目入面建一個完整嘅網頁 app。

React 同 Next.js 有咩分別?

React 係一個用嚟建介面元件嘅函式庫。Next.js 係一個框架,用 React 並加上路由、伺服器渲染、靜態頁面同伺服器端程式碼。每個 Next.js app 都係 React app,但唔係每個 React app 都用 Next.js。

Next.js 對 SEO 比較好嗎?

可以係。Next.js 可以由伺服器或者預先建好嘅靜態頁面,向搜尋引擎同訪客送出完整嘅 HTML;而純客戶端 React app 送出嘅係一個差唔多空白嘅頁面,然後由 JavaScript 填充。標題、描述同內容好重要,仲重要過框架本身。

用 Next.js 一定要用 Vercel 嗎?

唔一定。Next.js 係開源嘅,由 Vercel 開發,但可以喺任何運行 Node.js 嘅伺服器、Docker 容器上運行,或者為唔需要伺服器功能嘅網站輸出靜態檔案。有啲功能喺 Vercel 上設定會比較容易。

我嘅 app 應該用 Next.js 定係 Vite?

如果係登入後嘅 app,例如儀表板或者內部工具,Vite + React 會更簡單,而且運作良好。當你需要搜尋引擎容易讀取嘅內容、有大量公開頁面,或者想喺同一個項目入面同後端程式碼一齊做伺服器渲染頁面,Next.js 就值得使用。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)