Skip to content
GitHub

React Configuration

$ mkdir next-demo && cd next-demo
$ npm init -y
$ npm i react react-dom next

$ ls
> node_modules  package.json  package-lock.json

$ cat package.json
{
  "name": "next-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "next",                               # 添加命令, 开发项目
    "build": "next build",                       # 添加命令, 构建项目
    "start": "next start"                        # 添加命令, 启动项目
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "next": "^14.1.4",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  }
}

项目结构

next-app/
│
├── app/                                         # 页面文件夹
│   ├── page.js                                  # 主页
│   └── layout.js                                # 页面模板
│   └── login/                                   # 登录页面
│       └── page.js                              # 登录页面主页
│       └── layout.js                            # 登录页面模板
│
├── public/                                      # 静态资源文件夹
│   └── images/                                  # 图片
│   └── favicon.ico                              # 网站图标
│
├── styles/                                      # 样式文件夹
│   ├── globals.css                              # 全局样式
│   └── Home.module.css                          # 主页样式模块
│
├── components/                                  # 组件文件夹
│   └── Header.js                                # 头部组件
│   └── Footer.js                                # 底部组件
│
├── package.json                                 # 项目配置文件
├── .gitignore                                   # Git 忽略文件
└── README.md                                    # 项目说明文件

路由

# app 文件下, 只解析 page 文件作为路由, 其余文件不作为路由
├── app/
│   ├── page.js
│   └── layout.js                                # "/" 主页
│   └── login/
│   │   └── page.js                              # "/login" 登录页面主页
│   │   └── nav.js                               # 不解析
│   └── (content)/                               # 分组文件, 不作为路由
│       └── tag
│           └── page.js                          # "/tag"
│           └── layout.js
│   └── articles/                                # 分组文件, 不作为路由
│       └── [slug]                               # slug 可以为任意值
│           └── page.js                          # "/articles/3" 使用钩子获取路径参数取值渲染
│           └── layout.js

使用 vite 构建 React 项目

npm i vite -g                                    # 下载 vite

npm create vite demo                             # 创建项目
✔ Select a framework: › React
✔ Select a variant: › JavaScript
Scaffolding project in /root/Desktop/React/demo...

Done. Now run:

  cd demo
  npm install
  npm run dev

cd demo && npm install                           # 下载依赖包
npm run dev                                      # 启动项目

修改 vite 配置

export default defineConfig({
  server: {
    host: "10.58.14.96", // 修改服务 host
    port: 5173, // 修改服务端口
  },
  // ......
});
// app/page.jsx
export default function RootPage() {
  return <h1>Hello Next.js</h1>
}

// app/layout.jsx, page 内容会作为 children 变量, 嵌入模板
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        {/* Layout UI */}
        <main>{children}</main>
      </body>
    </html>
  )
}
// 使用 next Link 组件跳转页面
import Link from 'next/link'

export default function PageLink({ posts }) {
  return (
    <Link href='/index'>Index Page</Link>
  )
}

// 使用 next useRouter 跳转页面
'use client'

import { useRouter } from 'next/navigation'

export default function Page() {
  const router = useRouter()
  return (
    <button type="button" onClick={() => router.push('/dashboard')}>
      Dashboard
    </button>
  )
}