TypeScript Academy · Урок

Типы обработчиков App Router; серверные и клиентские компоненты

Разберитесь с настройками App Router по умолчанию (серверные компоненты), узнайте, когда выбирать клиентские компоненты, и научитесь типизировать обработчики маршрутов.

Урок 1 из 38 шагов

«Типы обработчиков 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 — локальная установка не требуется.

Все уроки этого курса

  1. Типы обработчиков App Router; серверные и клиентские компоненты
  2. Получение данных и типизация действий
  3. Типизация окружения и конфигурация
← Назад к TypeScript Academy