Типы обработчиков App Router; серверные и клиентские компоненты
Разберитесь с настройками App Router по умолчанию (серверные компоненты), узнайте, когда выбирать клиентские компоненты, и научитесь типизировать обработчики маршрутов.
«Типы обработчиков App Router; серверные и клиентские компоненты» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.
Введение
Цель: уверенно использовать маршрутизатор приложения с TypeScript. Вы изучите серверные компоненты (используемые по умолчанию), узнаете, когда выбирать клиентские компоненты, и типизируете обработчики маршрутов для конечных точек API.
- Возможности сервера и клиента
- Передача типизированных свойств между ними
- Типизированные NextRequest/NextResponse
Серверный компонент
Файлы в app/ по умолчанию являются серверными компонентами. Вы можете выполнять код только на сервере и получать данные до отрисовки.
// app/page.tsx (server component by default)
export default async function Page() {
// Server code: read env, fetch data, call DB (conceptually)
const data: { message: string } = { message: "Hello from server component" }
return (
<main style={{ display: "grid", gap: 8 }}>
<h1>Home</h1>
<p>{data.message}</p>
</main>
)
}Клиентский компонент
Добавьте директиву "use client" в начало файла, чтобы включить хуки и обработчики событий. Клиентские компоненты выполняются в браузере.
"use client"
import { useState } from "react"
// app/components/Counter.tsx (client component)
export default function Counter() {
const [n, setN] = useState(0)
return (
<div style={{ display: "flex", gap: 8, alignItems: "center" }}>
<button onClick={() => setN(n - 1)}>-</button>
<span>{n}</span>
<button onClick={() => setN(n + 1)}>+</button>
</div>
)
}Свойства от сервера к клиенту
Вычисляйте данные на сервере и передавайте их как типизированные свойства клиентским компонентам. Не переносите логику, предназначенную только для сервера, на клиент.
// app/page.tsx (server) + client import
import Counter from "./components/Counter"
export default async function Page() {
const initial = 5 // fetched or computed on the server
return (
<main style={{ display: "grid", gap: 12 }}>
<h2>Dashboard</h2>
<CounterWithStart start={initial} />
</main>
)
}
// app/components/CounterWithStart.tsx
"use client"
import { useState } from "react"
export default function CounterWithStart({ start }: { start: number }) {
const [n, setN] = useState(start)
return (
<div style={{ display: "flex", gap: 8, alignItems: "center" }}>
<button onClick={() => setN(n - 1)}>-</button>
<span>{n}</span>
<button onClick={() => setN(n + 1)}>+</button>
</div>
)
}Обработчики маршрутов
Используйте NextRequest/NextResponse для типизированных обработчиков в app/api/*/route.ts. Возвращайте JSON с кодами состояния.
// app/api/hello/route.ts (App Router API)
import { NextRequest, NextResponse } from "next/server"
export async function GET(req: NextRequest) {
const name = req.nextUrl.searchParams.get("name") ?? "world"
const body: { message: string } = { message: `Hello, ${name}!` }
return NextResponse.json(body, { status: 200 })
}
export async function POST(req: NextRequest) {
const payload = (await req.json()) as { name?: string }
const body = { created: true, name: payload.name ?? "anon" }
return NextResponse.json(body, { status: 201 })
}Советы
Советы:
- По умолчанию используйте серверные компоненты, а клиентские выбирайте только при необходимости интерактивности.
- Передавайте между сервером и клиентом небольшие сериализуемые свойства.
- Последовательно используйте типизированные формы
NextResponse.json.
Проверка клиентских компонентов в маршрутизаторе приложения
Быстрая проверка: как включить хуки в файле компонента в маршрутизаторе приложения?
Повторение
Повторение: маршрутизатор приложения по умолчанию использует серверные компоненты; добавьте "use client" для интерактивности, передавайте типизированные свойства через границу и типизируйте обработчики маршрутов с помощью NextRequest/NextResponse.
Изучай TypeScript с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 101
- Уроки
- 352
Часто задаваемые вопросы
Урок «Типы обработчиков App Router; серверные и клиентские компоненты» бесплатный?
Да — полный текст урока «Типы обработчиков App Router; серверные и клиентские компоненты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Типы обработчиков App Router; серверные и клиентские компоненты»?
Разберитесь с настройками App Router по умолчанию (серверные компоненты), узнайте, когда выбирать клиентские компоненты, и научитесь типизировать обработчики маршрутов. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Типы обработчиков App Router; серверные и клиентские компоненты»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Типы обработчиков App Router; серверные и клиентские компоненты
- Получение данных и типизация действий
- Типизация окружения и конфигурация