頁面與佈局
Pages Router 基於頁面的概念建立了一個基於檔案系統的路由器。
當檔案被添加到 pages
目錄時,它會自動成為一個可用的路由。
在 Next.js 中,頁面 是一個從 pages
目錄中的 .js
、.jsx
、.ts
或 .tsx
檔案匯出的 React 元件。每個頁面根據其檔案名稱與一個路由相關聯。
範例:如果您建立一個 pages/about.js
檔案並匯出如下所示的 React 元件,它將可以透過 /about
路徑存取。
索引路由
路由器會自動將名為 index
的檔案路由到目錄的根路徑。
pages/index.js
→/
pages/blog/index.js
→/blog
巢狀路由
路由器支援巢狀檔案結構。如果您建立一個巢狀的資料夾結構,檔案仍會以相同的方式自動路由。
pages/blog/first-post.js
→/blog/first-post
pages/dashboard/settings/username.js
→/dashboard/settings/username
動態路由頁面
Next.js 支援具有動態路由的頁面。例如,如果您建立一個名為 pages/posts/[id].js
的檔案,則可以透過 posts/1
、posts/2
等路徑存取。
要了解更多關於動態路由的資訊,請查閱 動態路由文件。
佈局模式
React 模型允許我們將 頁面 解構為一系列元件。這些元件中的許多部分通常會在頁面之間重複使用。例如,您可能每個頁面都有相同的導覽列和頁尾。
範例
使用自訂 App 的單一共享佈局
如果您的整個應用程式只有一個佈局,您可以建立一個 自訂 App 並用佈局包裝您的應用程式。由於 <Layout />
元件在切換頁面時會被重複使用,其元件狀態(例如輸入值)將被保留。
每頁佈局
如果您需要多個佈局,可以在頁面上添加一個 getLayout
屬性,允許您為佈局返回一個 React 元件。這使您可以根據 每頁 定義佈局。由於我們返回的是一個函數,如果需要,我們可以擁有複雜的巢狀佈局。
在頁面之間導航時,我們希望為單頁應用程式 (SPA) 體驗 保持 頁面狀態(輸入值、滾動位置等)。
這種佈局模式能夠保持狀態,因為 React 元件樹在頁面切換之間被保留。透過元件樹,React 可以理解哪些元素已更改以保留狀態。
須知:此過程稱為 調和 (reconciliation),這是 React 理解哪些元素已更改的方式。
使用 TypeScript
當使用 TypeScript 時,您必須首先為您的頁面建立一個包含 getLayout
函數的新類型。然後,您必須為您的 AppProps
建立一個新類型,覆蓋 Component
屬性以使用先前建立的類型。
資料獲取
在您的佈局中,您可以使用 useEffect
或像 SWR 這樣的函式庫在客戶端獲取資料。由於此檔案不是 頁面,您目前無法使用 getStaticProps
或 getServerSideProps
。