next.js實現項目搭建

一、創建 Next.js 項目的步驟

1、安裝

npx create-next-app@latest
# 或
yarn create next-app
# 或
pnpm create next-app

按照交互式提示配置你的項目:

  • 輸入項目名稱

  • 選擇是否使用 TypeScript

  • 選擇是否啟用 ESLint

  • 選擇是否啟用 Tailwind CSS

  • 選擇是否使用?src/?目錄

  • 選擇是否啟用實驗性 App 路由功能

  • 選擇是否自定義導入別名

1、運行

npm run dev

項目將在?http://localhost:3000?啟動。

2、常用命令

  • npm run dev?- 啟動開發服務器

  • npm run build?- 構建生產版本

  • npm run start?- 啟動生產服務器

  • npm run lint?- 運行 ESLint

3. 額外配置

添加 TypeScript(如果初始未選擇)

1、創建空 tsconfig.json:

touch tsconfig.json

2、安裝 TypeScript 依賴

npm install --save-dev typescript @types/react @types/node

3、重新運行?npm run dev,Next.js 會自動配置 tsconfig.json

添加樣式

Next.js 支持多種樣式解決方案:

  • CSS Modules(內置支持)

  • Tailwind CSS(推薦)

  • Sass(需要安裝?sass

  • CSS-in-JS(如 styled-components, emotion)

    二、Next.js (TypeScript) 配置多個頁面的方法

    在 Next.js 中配置多個頁面非常簡單,主要取決于你使用的是傳統的?pages?路由還是新的?app?路由(Next.js 13+)。以下是兩種方式的配置方法:

    方法一:使用傳統的?pages?路由

    1、創建頁面文件

    在?pages?目錄下,每個文件都會自動成為一個路由:

    pages/
    ├── index.tsx        // 對應路徑 /
    ├── about.tsx       // 對應路徑 /about
    ├── blog/
    │   ├── index.tsx   // 對應路徑 /blog
    │   └── [slug].tsx  // 動態路由 /blog/:slug
    └── users/└── [id].tsx    // 動態路由 /users/:id

    2、基本頁面示例

    pages/about.tsx:

    import React from 'react';const AboutPage: React.FC = () => {return (<div><h1>關于我們</h1><p>這是關于我們的頁面</p></div>);
    };export default AboutPage;

    3、動態路由頁面

    pages/blog/[slug].tsx:

    import { useRouter } from 'next/router';const BlogPost: React.FC = () => {const router = useRouter();const { slug } = router.query;return (<div><h1>博客文章: {slug}</h1><p>這是關于 {slug} 的文章內容</p></div>);
    };export default BlogPost;

    方法二:使用新的?app?路由 (Next.js 13+)

    1. 創建頁面結構

    app/
    ├── page.tsx        // 對應路徑 /
    ├── about/
    │   └── page.tsx   // 對應路徑 /about
    ├── blog/
    │   ├── page.tsx   // 對應路徑 /blog
    │   └── [slug]/
    │       └── page.tsx  // 動態路由 /blog/:slug
    └── users/└── [id]/└── page.tsx  // 動態路由 /users/:id

    2. 基本頁面示例

    app/about/page.tsx:

    export default function AboutPage() {return (<div><h1>關于我們</h1><p>這是關于我們的頁面</p></div>);
    }

    3. 動態路由頁面

    app/blog/[slug]/page.tsx:

    export default function BlogPost({params,
    }: {params: { slug: string };
    }) {return (<div><h1>博客文章: {params.slug}</h1><p>這是關于 {params.slug} 的文章內容</p></div>);
    }

    【1】頁面間導航

    使用 Next.js 的?Link?組件實現頁面間導航:

    import Link from 'next/link';export default function Navigation() {return (<nav><Link href="/">首頁</Link><Link href="/about">關于</Link><Link href="/blog">博客</Link><Link href="/blog/first-post">第一篇文章</Link></nav>);
    }

    【2】獲取路由參數

    在?pages?路由中:

    import { useRouter } from 'next/router';// 在組件內
    const router = useRouter();
    const { id } = router.query;

    在?app?路由中:

    // 直接從組件的 props 中獲取
    export default function Page({ params }: { params: { id: string } }) {return <div>ID: {params.id}</div>;
    }

    【3】注意事項

    1. 確保文件名正確:

      • pages?路由:直接使用?.tsx?文件

      • app?路由:必須在文件夾內創建?page.tsx

    2. 動態路由參數:

      • pages?路由:使用?[param].tsx?格式

      • app?路由:使用?[param]/page.tsx?格式

    3. 如果你同時使用?pages?和?app?路由,Next.js 會優先使用?app?路由。

    4. 對于 API 路由:

      • pages?路由:放在?pages/api?目錄下

      • app?路由:放在?app/api?目錄下

    這樣配置后,你的 Next.js 應用就可以支持多個頁面和動態路由了。

    三、復用 Header 和 Footer 組件

    登錄是一個頁面,其他首頁,個人中心,關于我們等頁面,頭部和底部配置好,不需要在每個使用的頁面中引用。

    方法一、創建可復用組件(推薦)

    1、創建共享組件

    首先,將 Header 和 Footer 拆分為獨立組件:

    // components/Header.tsx
    export default function Header() {return (<header className="w-full h-12 bg-pink-500 flex items-center justify-center"><h1 className="text-white font-bold">頭部導航</h1></header>);
    }
    // components/Footer.tsx
    export default function Footer() {return (<footer className="w-full h-12 bg-yellow-300 flex items-center justify-center"><p className="text-gray-800">? 2023 版權所有</p></footer>);
    }

    2、創建布局組件(可選但推薦)

    // components/Layout.tsx
    import Header from './Header';
    import Footer from './Footer';export default function Layout({ children }: { children: React.ReactNode }) {return (<div className="min-h-screen flex flex-col"><Header /><main className="flex-1 p-4">{children}</main><Footer /></div>);
    }

    3、在頁面中使用

    home 頁面:

    // app/home/page.tsx
    import Layout from '@/components/Layout';export default function HomePage() {return (<Layout><section className="max-w-4xl mx-auto"><h2 className="text-2xl font-bold mb-4">首頁內容</h2><p>這里是首頁的內容...</p></section></Layout>);
    }

    about 頁面:

    // app/about/page.tsx
    import Layout from '@/components/Layout';export default function AboutPage() {return (<Layout><section className="max-w-4xl mx-auto"><h2 className="text-2xl font-bold mb-4">關于我們</h2><p>這里是關于我們的內容...</p></section></Layout>);
    }

    方法二、使用根布局 (App Router 特有)

    1、修改根布局

    // app/layout.tsx
    import Header from '@/components/Header';
    import Footer from '@/components/Footer';export default function RootLayout({children,
    }: {children: React.ReactNode;
    }) {return (<html lang="zh-CN"><body className="min-h-screen flex flex-col"><Header /><main className="flex-1">{children}</main><Footer /></body></html>);
    }

    2、頁面內容會自動嵌入

    這樣所有頁面都會自動包含 Header 和 Footer,無需在每個頁面單獨引入。

    方法三、使用模板組件

    如果你需要某些頁面有不同的布局:

    // app/template.tsx
    'use client';import Header from '@/components/Header';
    import Footer from '@/components/Footer';export default function Template({ children }: { children: React.ReactNode }) {return (<div className="min-h-screen flex flex-col"><Header /><main className="flex-1 p-4">{children}</main><Footer /></div>);
    }

    然后在頁面中使用:

    // app/about/page.tsx
    import Template from '@/app/template';export default function AboutPage() {return (<Template><section className="max-w-4xl mx-auto"><h2 className="text-2xl font-bold mb-4">關于我們</h2><p>這里是關于我們的內容...</p></section></Template>);
    }

    【1】最佳實踐建議

    1. 推薦使用方法一(獨立組件+布局組件):

      • 靈活性最高

      • 可以輕松在某些頁面中隱藏 Header/Footer

      • 便于維護和更新

    2. 如果 Header/Footer 在所有頁面都相同

      • 可以使用方法二(根布局)

      • 最簡單直接

    3. 需要不同變體時

      • 可以創建多個布局組件(如?LayoutWithNav,?SimpleLayout

      • 根據頁面需求選擇不同布局

    這樣配置后,你的 about 頁面將自動復用 home 頁面的頭部和底部,同時保持代碼的整潔和可維護性。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/pingmian/80950.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80950.shtml
    英文地址,請注明出處:http://en.pswp.cn/pingmian/80950.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    PHP基礎知識

    【學習資料】 視頻&#xff1a; https://www.bilibili.com/video/BV1Xh411S7G1?spm_id_from333.788.videopod.episodes&vd_sourcebe26b82da70367069ab00d6db4f4ffc0 文檔&#xff1a;https://www.runoob.com/php/php-tutorial.html 目錄 1&#xff0c;PHP是什么2&#xff…

    國內MCP服務平臺推薦 AIbase推出MCP服務器客戶端商店

    在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;技術正以前所未有的速度發展&#xff0c;不斷改變著我們的生活和工作方式。2025年&#xff0c;AI領域迎來了一項重要的技術進展——MCP(Model Context Protocol&#xff0c;模型上下文協議)的廣泛應用。這一技術…

    在文件檢索方面doris和elasticsearch的區別

    apache Doris 與 Elasticsearch 在文件檢索領域的差異源于技術架構與定位目標的本質區別,以下從核心維度對比分析二者的技術特性: 一、 ?架構設計與定位差異? ?維度??Apache Doris??Elasticsearch??核心架構?分布式 MPP 列式分析引擎,面向 OLAP 優化分布式倒排索…

    鴻蒙OSUniApp打造多功能圖表展示組件 #三方框架 #Uniapp

    使用UniApp打造多功能圖表展示組件 在當前移動應用開發領域&#xff0c;數據可視化已成為不可或缺的一部分。無論是展示銷售數據、用戶增長趨勢還是其他業務指標&#xff0c;一個優秀的圖表組件都能有效提升用戶體驗。UniApp作為一款跨平臺開發框架&#xff0c;如何在其中實現…

    AI Agent開發第67課-徹底消除RAG知識庫幻覺-文檔分塊全技巧(1)

    開篇 在上篇《AI Agent開發第66課-徹底消除RAG知識庫幻覺-帶推理的RAG》放出后,網友們反響很大。有得告訴我:原來還有Rewrite這么一招?早知道這一招很多之前的一些遺留問題都能解決了。不過在上一篇結尾我已經提到了,要真正解決一個AI Agent在響應時產生的幻覺我們用提示語…

    NHANES指標推薦:OBS

    文章題目&#xff1a;Association between oxidative balance score and all-cause and cancer-specific mortality among cancer survivors DOI&#xff1a;10.3389/fimmu.2025.1541675 中文標題&#xff1a;癌癥幸存者氧化平衡評分與全因死亡率和癌癥特異性死亡率之間的關聯 …

    主流快遞查詢API橫向對比:快遞100快遞鳥菜鳥物流接口差異解析

    主流快遞查詢API橫向對比&#xff1a;快遞100/快遞鳥/菜鳥物流接口差異解析 一、核心功能與適用范圍 菜鳥API 核心功能&#xff1a;物流信息查詢、電子面單打印、智能倉儲管理、跨境物流服務&#xff0c;整合阿里生態資源&#xff08;如淘寶、天貓訂單直接對接&#xff09;。…

    解決:npm install報錯,reason: certificate has expired

    目錄 1. 問題分析2. 問題解決2.1 查看配置的鏡像2.2 修改鏡像源 種一棵樹最好的時間是10年前&#xff0c;其次就是現在&#xff0c;加油&#xff01; --by蠟筆小柯南 1. 問題分析 啟動前…

    緩存(5):常見 緩存數據淘汰算法/緩存清空策略

    主要的三種緩存數據淘汰算法 FIFO(first in first out)&#xff1a;先進先出策略&#xff0c;最先進入緩存的數據在緩存空間不夠的情況下&#xff08;超出最大元素限制&#xff09;會被優先被清除掉&#xff0c;以騰出新的空間接受新的數據。策略算法主要比較緩存元素的創建時…

    Spring框架的事務管理

    引言 在企業級應用開發中&#xff0c;事務管理是一個至關重要的環節&#xff0c;它確保了數據的一致性和完整性。Spring 框架為我們提供了強大而靈活的事務管理功能&#xff0c;能夠幫助開發者更輕松地處理復雜的事務場景。本文將深入探討 Spring 框架的事務管理&#xff0c;包…

    FPGA: UltraScale+ bitslip實現(ISERDESE3)

    收獲 一晃五年~ 五年前那個夏夜&#xff0c;我對著泛藍的屏幕敲下《給十年后的自己》&#xff0c;在2020年的疫情迷霧中編織著對未來的想象。此刻回望&#xff0c;第四屆集創賽的參賽編號仍清晰如昨&#xff0c;而那個在家熬夜焊電路板的"不眠者"&#xff0c;現在…

    用 wireshark 解密 SIP over TLS 以及 SRTP 解密

    --todo 有空再搞 MicroSIP 向 FreeSWITCH 注冊&#xff0c;transport 設置為 tls 同時 Media Encryption 設置為強制 FreeSWITCH 做一個這樣的路由&#xff1a; <action application"set" data"rtp_secure_mediaoptional"/> <action applicat…

    Delphi 12.3調用Chrome/edge內核實現DEMO源碼

    DELPHI使用調用Chrome/Edge內核瀏覽器&#xff0c;雖然舊的WebBrowser也還可以用&#xff0c;但大勢所趨&#xff0c;新版的已經不需要使用第三方的組件了&#xff0c;算是全內置的開發了&#xff0c;不廢話 Unit1 源碼 Form 源碼 unit Unit1;interfaceusesWinapi.Windows, W…

    快速搭建一個electron-vite項目

    1. 初始化項目 在命令行中運行以下命令 npm create quick-start/electronlatest也可以通過附加命令行選項直接指定項目名稱和你想要使用的模版。例如&#xff0c;要構建一個 Electron Vue 項目&#xff0c;運行: # npm 7&#xff0c;需要添加額外的 --&#xff1a; npm cre…

    26考研 | 王道 | 計算機組成原理 | 一、計算機系統概述

    26考研 | 王道 | 計算機組成原理 | 一、計算機系統概述 文章目錄 26考研 | 王道 | 計算機組成原理 | 一、計算機系統概述1.1 計算機的發展1.2 計算機硬件和軟件1.2.1 計算機硬件的基本組成1.2.2 各個硬件的工作原理1.2.3 計算機軟件1.2.4 計算機系統的層次結構1.2.5 計算機系統…

    01-數據結構概述和時間空間復雜度

    數據結構概述和時間空間復雜度 1. 什么是數據結構 數據結構&#xff08;Data Structure&#xff09;是計算機存儲、組織數據的方式&#xff0c;指相互之間存在一種或多種特定關系的數據元素的集合。 2. 什么是算法 算法&#xff08;Algorithm&#xff09;就是定義良好的計算…

    大數據架構選型全景指南:核心架構對比與實戰案例 解析

    目錄 大數據架構選型全景指南&#xff1a;核心架構對比與實戰案例解析1. 主流架構全景概覽1.1 核心架構類型1.2 關鍵選型維度 2. 架構對比與選型矩陣2.1 主流架構對比表2.2 選型決策樹 3. 案例分析與實現案例1&#xff1a;電商實時推薦系統&#xff08;Lambda架構&#xff09;案…

    (51單片機)LCD顯示紅外遙控相關數字(Delay延時函數)(LCD1602教程)(Int0和Timer0外部中斷教程)(IR紅外遙控模塊教程)

    前言&#xff1a; 本次Timer0模塊改裝了一下&#xff0c;注意&#xff01;&#xff01;&#xff01;今天只是簡單的實現一下&#xff0c;明天用次功能顯示遙控密碼鎖 演示視頻&#xff1a; 在審核 源代碼&#xff1a; 如上圖將9個文放在Keli5 中即可&#xff0c;然后燒錄在…

    網絡實驗-防火墻雙機熱備份

    實驗目的 了解防火墻雙機熱備份配置&#xff0c;提供部署防火墻可靠性。 網絡拓撲 左側為trust域&#xff0c;右側為untrust域。防火墻之間配置雙機熱備份。 配置內容 master VRRP 由于防火墻是基于會話表匹配回程流量&#xff0c;流量去向和回程必須通過同一個防火墻。…

    【2025最新】VSCode Cline插件配置教程:免費使用Claude 3.7提升編程效率

     ?2025年最新VSCode Cline插件安裝配置教程&#xff0c;詳解多種免費使用Claude 3.7的方法&#xff0c;集成DeepSeek-R1與5大實用功能&#xff0c;專業編程效率提升指南。 Cline是VSCode中功能最強大的AI編程助手插件之一&#xff0c;它能與Claude、OpenAI等多種大模型無縫集…