Описание проекта Next.js
Проект Next.js состоит из множества файлов и папок, каждая из которых имеет свое конкретное назначение.
Ниже приведено базовое объяснение кода проекта Next.js, которое поможет вам понять структуру проекта и назначение каждой части.
Начиная с Next.js 13, Next.js представил App Router на основе файловой системы (каталог app), заменив традиционный каталог pages. Новый каталог app предлагает более мощные возможности, такие как вложенная маршрутизация, макеты, серверные компоненты и многое другое.
Структура проекта
Проект Next.js, использующий каталог app, обычно содержит следующие файлы и папки:
my-next-app/ ├── node_modules/ # 项目依赖的第三方库 ├── public/ # 静态资源文件夹 │ ├── favicon.ico # 网站图标 │ └── ... # 其他静态资源(如图片、字体等) ├── app/ # 应用路由目录(核心) │ ├── layout.js # 根布局组件 │ ├── page.js # 首页组件 │ ├── about/ # 关于页面 │ │ └── page.js # 关于页面组件 │ ├── blog/ # 博客页面 │ │ ├── page.js # 博客列表页 │ │ └── [slug]/ # 动态路由 │ │ └── page.js # 博客详情页 │ └── ... # 其他页面和路由 ├── components/ # 可复用的 React 组件 ├── styles/ # 样式文件 ├── utils/ # 工具函数 ├── package.json # 项目配置和依赖管理 ├── package-lock.json # 依赖的精确版本锁定文件 ├── next.config.js # Next.js 配置文件 └── README.md # 项目说明文档
Описание основных файлов
app/layout.js
app/layout.jsЭто корневой файл макета, используемый для определения структуры макета всего приложения.
app/layout.jsОн оборачивает все страницы и может включать глобальные стили, метаданные и т. д.
Пример
return (
<html>
<body>{children}</body>
</html>
);
}
app/page.js
app/page.jsЭто файл главной страницы, соответствующий маршруту /./。
Пример
return (
<div>
<h1>Добро пожаловать в Next.js 13!</h1>
</div>
);
}
app/about/page.js
app/about/page.jsЭто файл страницы «О нас», соответствующий маршруту /about.
Пример
return (
<div>
<h1>О нас</h1>
<p>Это страница «О нас».</p>
</div>
);
}
app/blog/[slug]/page.js
app/blog/[slug]/page.jsЭто файл динамического маршрута, используемый для обработки таких маршрутов, как/blog/:slugмаршруты.
Пример
return (
<div>
<h1>Запись блога: {params.slug}</h1>
</div>
);
}
app/loading.js
app/loading.jsЭто файл состояния загрузки, используется для отображения состояния загрузки во время загрузки страницы.
Пример
return <p>Loading...</p>;
}
app/error.js
app/error.jsЭто файл страницы ошибки, используется для перехвата и отображения ошибок.
Пример
export default function Error({ error, reset }) {
return (
<div>
<h2>Что-то пошло не так!</h2>
<button onClick={() => reset()}>Попробовать снова</button>
</div>
);
}
app/not-found.js
app/not-found.jsЭто файл страницы 404, используется для отображения страницы not-found.
Пример
return (
<div>
<h2>Страница не найдена</h2>
</div>
);
}
Объяснение новых возможностей
1. Серверные компоненты
Next.js 13 по умолчанию использует серверные компоненты, уменьшая объём загружаемого клиентского JavaScript.
Серверные компоненты могут напрямую обращаться к данным бэкенда без необходимости дополнительных вызовов API.
Пример
const res = await fetch('https://api.example.com/data');
return res.json();
}
export default async function Page() {
const data = await getData();
return <div>{data.message}</div>;
}
2. Клиентские компоненты
Если вам нужно использовать состояние React или браузерные API, вы можете пометить компонент как клиентский компонент.
Используйте'use client'в качестве директивы.
Пример
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Количество: {count}</p>
<button onClick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
}
3. Вложенные макеты
Вы можете создавать вложенные макеты в каталоге app, и каждый подкаталог может иметь собственный файл макета.
Например:
app/dashboard/layout.jsЭто макет для страницы dashboard.
app/dashboard/page.jsЭто содержимое страницы dashboard.
4. Потоковая передача
Next.js 13 поддерживает потоковый рендеринг, который позволяет постепенно отрисовывать содержимое во время загрузки страницы.
Пример
export default function Page() {
return (
<div>
<Suspense fallback={<p>Загрузка...</p>}>
<SlowComponent />
</Suspense>
</div>
);
}
Запуск проекта
Запустите сервер разработки:
Запустите
npm run devилиyarn devчтобы запустить сервер разработки.Откройте браузер и перейдите по адресу
http://localhost:3000чтобы просмотреть приложение.
Сборка production-кода:
Запустите
npm run buildилиyarn buildчтобы сгенерировать оптимизированный production-код.
Запустите production-сервер:
Запустите
npm run startилиyarn startчтобы запустить production-сервер.