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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

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

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 142
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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.

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

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

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

  • Забыть 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

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

  • Fullstack-разработчик (Middle+ / Senior)
  • Fullstack-разработчик
  • Fullstack Developer (React, Next.js, PHP, AI)
  • Senior Full-stack Engineer | AI
  • Head of SEO & GEO