Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 138новых вакансий за сутки·93 809вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 271
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 229
  • Облачные технологии14 182
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 801
  • Продакт-менеджер1 247

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии996
  • AI вакансии955
  • Frontend вакансии754
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 596
  • Node.js2 036
  • .NET1 740
  • Kotlin1 618
  • Rust1 473
  • C#719
  • PHP690
  • C++580

DevOps и инфраструктура

  • Kubernetes7 788
  • DevOps вакансии6 103
  • Linux-инфраструктура5 508
  • Terraform / IaC4 290
  • CI/CD3 280
  • Мониторинг и Observability1 791
  • SRE566
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 142
  • Бизнес-аналитик923
  • Аналитик данных859
  • Системный аналитик154

Другие направления

  • Проджект-менеджер623
  • UI/UX дизайн149
  • Ручное тестирование14

По регионам

  • Вакансии в США44 156
  • Вакансии в Европе24 035
  • Вакансии в Канаде4 532
  • Работа в России3 865

По формату

  • Удалённые вакансии74 994
  • Релокация в США44 154
  • Гибридная работа12 489
  • Офисная работа7 090

По уровню

  • Senior вакансии42 633
  • Middle вакансии20 958
  • Junior вакансии6 709

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме Next.jsВсе вопросы
Next.jsMiddleТеория

Что такое Server Actions в Next.js и как они работают?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Server Actions — async-функции с директивой 'use server', которые выполняются на сервере и могут вызываться из форм или клиентского кода без явного API-эндпоинта.

Как объявить Server Action

Директива "use server" ставится либо в начало файла (тогда все экспорты файла — Server Actions), либо внутри тела конкретной функции:

// app/actions/user.ts — файл целиком серверный
"use server";

import { db } from "@/lib/db";
import { revalidatePath } from "next/cache";

export async function createUser(formData: FormData) {
  const name = formData.get("name") as string;
  const email = formData.get("email") as string;

  if (!name || !email) {
    return { error: "Имя и email обязательны" };
  }

  await db.query(
    "INSERT INTO users (name, email) VALUES ($1, $2)",
    [name, email]
  );

  revalidatePath("/users"); // инвалидируем кэш страницы
  return { success: true };
}

Server Actions в Next.js

Server Actions — это асинхронные функции, помеченные директивой "use server", которые Next.js автоматически превращает в HTTP POST-эндпоинты. Их можно вызывать напрямую из JSX-форм или из клиентского кода — Next.js сам формирует сетевой запрос, сериализует аргументы через React Flight Protocol и выполняет функцию на сервере.

Использование в HTML-форме (прогрессивное улучшение)

// app/users/new/page.tsx — Server Component
import { createUser } from "@/app/actions/user";

export default function NewUserPage() {
  return (
    <form action={createUser}>
      <input name="name" placeholder="Имя" required />
      <input name="email" type="email" placeholder="Email" required />
      <button type="submit">Создать</button>
    </form>
  );
}

Использование из Client Component с useActionState

"use client";

import { useActionState } from "react";
import { createUser } from "@/app/actions/user";

export function CreateUserForm() {
  const [state, formAction, isPending] = useActionState(createUser, null);

  return (
    <form action={formAction}>
      <input name="name" placeholder="Имя" />
      <input name="email" type="email" placeholder="Email" />
      {state?.error && <p style={{ color: "red" }}>{state.error}</p>}
      {state?.success && <p>Пользователь создан!</p>}
      <button type="submit" disabled={isPending}>
        {isPending ? "Создание..." : "Создать"}
      </button>
    </form>
  );
}

Вызов как обычная функция из обработчика события

"use client";

import { deleteUser } from "@/app/actions/user";

export function DeleteButton({ userId }: { userId: string }) {
  return (
    <button
      onClick={async () => {
        await deleteUser(userId);
      }}
    >
      Удалить
    </button>
  );
}

Встроенный Server Action внутри Server Component

// app/posts/[id]/page.tsx
export default function PostPage({ params }: { params: { id: string } }) {
  async function deletePost() {
    "use server";
    await db.query("DELETE FROM posts WHERE id = $1", [params.id]);
    revalidatePath("/posts");
  }

  return (
    <form action={deletePost}>
      <button type="submit">Удалить пост</button>
    </form>
  );
}

Подводные камни

  • Отсутствие валидации — критическая уязвимость: Server Actions доступны как публичные POST-эндпоинты; всегда валидируйте входные данные с помощью zod или аналога и проверяйте авторизацию пользователя.
  • FormData, не JSON: когда Action вызывается через <form action=>, аргументом приходит FormData, а не объект; при вызове как функция — аргументы передаются напрямую.
  • Нельзя возвращать несериализуемые значения: ответ Action сериализуется через RSC Protocol; Promise, Map, Set и классовые экземпляры вызовут ошибку.
  • revalidatePath/revalidateTag работают только на сервере: не пытайтесь вызвать их в Client Component — они определены только в серверном контексте.
  • Оптимистичные обновления требуют useOptimistic: без него UI блокируется на время запроса; используйте useOptimistic из React для мгновенного отклика.
  • Ошибки в Actions не перехватываются автоматически: необброшенное исключение показывает глобальный error boundary; возвращайте объекты с полем error для graceful-обработки.
  • CSRF-защита встроена, но только для same-origin запросов; при работе через iframe или сторонний домен нужна дополнительная защита.
  • redirect() внутри try/catch ломается: redirect() из next/navigation бросает специальный Error; перехват его в try/catch прервёт редирект — вызывайте redirect вне блока catch.

Типичные ошибки

  • Забыть revalidatePath/revalidateTag после мутации
  • Возвращать из экшена объекты с секретными полями
  • Не валидировать FormData (доверять formData.get)
  • Превышать bodySizeLimit при загрузке файлов

Что проверяет интервьюер

  • Знает оба способа объявления 'use server'
  • Понимает протокол вызова и роль Next-Action
  • Умеет инвалидировать кеши после мутации
  • Помнит про авторизацию и origin

Как вы знаете этот вопрос?

Проверить себя по теме Next.js →

Источники

  • https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations
  • https://nextjs.org/docs/app/api-reference/functions/server-actions
←Предыдущий вопросКакие production-риски есть у Next.js: hydration, bundle size, caching, accessibility, browser compatibility или observability?Следующий вопрос→Что такое Streaming в Next.js и как он работает с `loading.tsx` и Suspense?

Связанные темы

Next.jscache-invalidationform-handlingmutations-design

Вакансии с этим навыком

  • Staff Frontend Engineer (React)
  • Software Engineer
  • Senior Frontend Developer (React / Next.js)
  • Frontend-разработчик
  • Technical Operations Lead

Частые вопросы на собеседовании

  • Как оптимизировать производительность Next.js-приложения?
  • Что такое React Server Components в Next.js? Чем они отличаются от Client Components?
  • В каких типах frontend-проектов Next.js даёт реальный выигрыш, а где будет избыточен или неудачен?
  • Объясните SSR, SSG, ISR и CSR в Next.js. Когда использовать каждый подход?