next.js实现项目搭建

一、创建 Next.js 项目的步骤

1、安装

javascript 复制代码
npx create-next-app@latest
# 或
yarn create next-app
# 或
pnpm create next-app

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

  • 输入项目名称

  • 选择是否使用 TypeScript

  • 选择是否启用 ESLint

  • 选择是否启用 Tailwind CSS

  • 选择是否使用 src/ 目录

  • 选择是否启用实验性 App 路由功能

  • 选择是否自定义导入别名

1、运行

javascript 复制代码
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:

javascript 复制代码
touch tsconfig.json

2、安装 TypeScript 依赖

javascript 复制代码
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 目录下,每个文件都会自动成为一个路由:

javascript 复制代码
pages/
├── index.tsx        // 对应路径 /
├── about.tsx       // 对应路径 /about
├── blog/
│   ├── index.tsx   // 对应路径 /blog
│   └── [slug].tsx  // 动态路由 /blog/:slug
└── users/
    └── [id].tsx    // 动态路由 /users/:id

2、基本页面示例

pages/about.tsx:

javascript 复制代码
import React from 'react';

const AboutPage: React.FC = () => {
  return (
    <div>
      <h1>关于我们</h1>
      <p>这是关于我们的页面</p>
    </div>
  );
};

export default AboutPage;

3、动态路由页面

pages/blog/[slug].tsx:

javascript 复制代码
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. 创建页面结构

javascript 复制代码
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:

javascript 复制代码
export default function AboutPage() {
  return (
    <div>
      <h1>关于我们</h1>
      <p>这是关于我们的页面</p>
    </div>
  );
}

3. 动态路由页面

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

javascript 复制代码
export default function BlogPost({
  params,
}: {
  params: { slug: string };
}) {
  return (
    <div>
      <h1>博客文章: {params.slug}</h1>
      <p>这是关于 {params.slug} 的文章内容</p>
    </div>
  );
}

【1】页面间导航

使用 Next.js 的 Link 组件实现页面间导航:

javascript 复制代码
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 路由中:

javascript 复制代码
import { useRouter } from 'next/router';

// 在组件内
const router = useRouter();
const { id } = router.query;

app 路由中:

javascript 复制代码
// 直接从组件的 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. 如果你同时使用 pagesapp 路由,Next.js 会优先使用 app 路由。

  4. 对于 API 路由:

    • pages 路由:放在 pages/api 目录下

    • app 路由:放在 app/api 目录下

这样配置后,你的 Next.js 应用就可以支持多个页面和动态路由了。

登录是一个页面,其他首页,个人中心,关于我们等页面,头部和底部配置好,不需要在每个使用的页面中引用。

方法一、创建可复用组件(推荐)

1、创建共享组件

首先,将 Header 和 Footer 拆分为独立组件:

javascript 复制代码
// 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>
  );
}
javascript 复制代码
// 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、创建布局组件(可选但推荐)

javascript 复制代码
// 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 页面:

javascript 复制代码
// 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 页面:

javascript 复制代码
// 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、修改根布局

javascript 复制代码
// 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,无需在每个页面单独引入。

方法三、使用模板组件

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

javascript 复制代码
// 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>
  );
}

然后在页面中使用:

javascript 复制代码
// 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 页面的头部和底部,同时保持代码的整洁和可维护性。

相关推荐
C澒4 分钟前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
崔庆才丨静觅5 分钟前
稳定好用的 ADSL 拨号代理,就这家了!
前端
江湖有缘7 分钟前
Docker部署music-tag-web音乐标签编辑器
前端·docker·编辑器
早點睡39010 分钟前
高级进阶 React Native 鸿蒙跨平台开发:react-native-device-info 设备信息获取
react native·react.js·harmonyos
恋猫de小郭1 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅8 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了9 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅9 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅9 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端