app
та pages
Next.js — фреймворк для React, який дозволяє створювати веб-застосунки різного типу.
З виходом версії 13, Next.js представив App Router, що відкриває нові можливості для розробників.
Останні версії Next.js включають:
app/
Переконайтеся, що у вас встановлені Node.js та npm. Завантажте їх з офіційного сайту nodejs.org.
Для створення нового проекту з використанням App Router та TypeScript виконайте команду:
npx create-next-app@latest my-next-app
Потрібно обрати відповідні параметри для App Router та TypeScript.
package.json
Відкрийте файл package.json
, де містяться залежності та скрипти для запуску проекту.
Візуалізація структури проекту
app
та pages
pages/
pages/
стає маршрутом.app/
(App Router)fetch
безпосередньо у серверних компонентах.layout.tsx
.Особливість | pages/ |
app/ (App Router) |
---|---|---|
Підтримка серверних компонентів | ❌ Немає | ✔️ Є |
Система маршрутизації | На основі файлів | На основі директорій |
Фетчинг даних |
getStaticProps , getServerSideProps
|
Використання fetch у компоненті |
Макети | Немає | Підтримуються через layout.tsx
|
Статична генерація | Підтримується | Підтримується |
Підтримка TypeScript | ✔️ Є | ✔️ Є |
App Router використовує папку app/
для визначення маршрутів. Кожна папка представляє маршрут, а файл page.tsx
в цій папці відповідає за вміст сторінки.
app/
Наприклад, створення сторінки "About":
// app/about/page.tsx
export default function AboutPage() {
return <h1>Про нас</h1>;
}
Створимо динамічний маршрут для постів:
// app/posts/[id]/page.tsx
interface PostPageProps {
params: { id: string };
}
export default function PostPage({ params }: PostPageProps) {
const { id } = params;
return <p>Пост: {id}</p>;
}
За замовчуванням, компоненти у папці app/
є серверними. Щоб створити клієнтський компонент, додайте 'use client';
на початку файлу.
// app/components/Counter.tsx
"use client";
import { useState } from "react";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>Клікнули {count} разів</button>
);
}
// app/posts/[id]/page.tsx
import Counter from "@/app/components/Counter";
interface PostPageProps {
params: { id: string };
}
export default function PostPage({ params }: PostPageProps) {
const { id } = params;
return (
<>
<p>Пост: {id}</p>
<Counter />
</>
);
}
Клієнтські компоненти можуть використовувати React-хуки, такі як useState
, useEffect
тощо.
fetch
у серверних компонентахСерверні компоненти можуть виконувати фетчинг даних безпосередньо за допомогою fetch
.
// app/products/page.tsx
interface Product {
id: number;
title: string;
}
export default async function ProductsPage() {
const res = await fetch("https://fakestoreapi.com/products");
const products: Product[] = await res.json();
return (
<ul>
{products.map((product) => (
<li key={product.id}>{product.title}</li>
))}
</ul>
);
}
Next.js автоматично кешує запити fetch
у серверних компонентах. Ви можете налаштувати кешування за допомогою опцій fetch
.
await fetch("https://fakestoreapi.com/products", { cache: "no-store" });
Створення сторінки поста з фетчингом даних:
// app/products/[id]/page.tsx
interface ProductPageProps {
params: { id: string };
}
interface Product {
id: number;
title: string;
}
export default async function ProductPage({ params }: ProductPageProps) {
const { id } = params;
const res = await fetch(`https://fakestoreapi.com/products/${id}`);
const product: Product = await res.json();
return (
<div>
<h1>{product.title}</h1>
</div>
);
}
next.config.mjs
Файл next.config.mjs
використовується для налаштування вашого Next.js застосунку з App Router.
Приклад налаштування basePath:
// next.config.mjs
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
basePath: '/docs',
},
};
module.exports = nextConfig;
Ви можете продовжувати використовувати плагіни Next.js з App Router для розширення функціональності.
Для збірки проекту виконайте команду:
npm run build
Vercel повністю підтримує проекти з App Router.
Vercel автоматично визначить налаштування для Next.js з App Router.
Кожен пуш до репозиторію ініціює нове розгортання.
Додайте свій домен у вкладці "Domains" та оновіть DNS-записи.
Додайте змінні у вкладці "Environment Variables".
Використовуйте Analytics та Logs у Vercel для моніторингу.
layout.tsx
) для спільних компонентів.Сьогодні ми ознайомилися з новим App Router у Next.js 13, його структурою та можливостями. Ви дізналися, як створювати серверні та клієнтські компоненти, працювати з фетчингом даних, розгортати проект та використовувати TypeScript.
Час для ваших запитань та обговорення.