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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python13 614
  • Облачные технологии9 925
  • QA вакансии3 157
  • Android1 675
  • Инженер данных1 071
  • Продакт-менеджер317

Разработка

  • iOS1 558
  • Backend вакансии1 462
  • AI вакансии743
  • Fullstack вакансии576
  • Frontend вакансии495
  • Mobile вакансии28

По стеку

  • Go7 718
  • Java4 674
  • Node.js1 474
  • Kotlin1 310
  • Rust1 275
  • .NET1 098
  • PHP474
  • C++314
  • C#210

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

  • Kubernetes5 760
  • Linux-инфраструктура4 462
  • DevOps вакансии3 927
  • Terraform / IaC3 213
  • Мониторинг и Observability1 531
  • CI/CD932
  • SRE416
  • Кибербезопасность29

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

  • Аналитик данных611
  • Бизнес-аналитик534
  • Data Scientist444
  • Системный аналитик80

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

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

По регионам

  • Вакансии в США31 393
  • Вакансии в Европе11 635
  • Работа в России3 672
  • Вакансии в Канаде2 524

По формату

  • Удалённые вакансии47 029
  • Релокация в США31 393
  • Гибридная работа8 379
  • Офисная работа5 670

По уровню

  • Senior вакансии25 431
  • Middle вакансии11 844
  • Junior вакансии4 210

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме tRPCВсе вопросы
tRPCSeniorПроектирование систем

Как использовать tRPC с Next.js (App Router и Pages Router)?

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

В Pages Router используется createNextApiHandler для API-route и createTRPCNext для React-хуков. В App Router серверные компоненты вызывают процедуры напрямую через createCallerFactory, клиентские компоненты — через createTRPCReact с fetchRequestHandler.

tRPC в Next.js Pages Router

Классический подход: API Route в pages/api/trpc/[trpc].ts обрабатывает все запросы через fetchRequestHandler или createNextApiHandler.

// pages/api/trpc/[trpc].ts
import { createNextApiHandler } from '@trpc/server/adapters/next';
import { appRouter } from '../../../server/trpc/router';
import { createContext } from '../../../server/trpc/context';

export default createNextApiHandler({
  router: appRouter,
  createContext,
  onError({ error, path }) {
    if (error.code === 'INTERNAL_SERVER_ERROR') {
      console.error(`Error on ${path}:`, error);
    }
  },
});
// utils/trpc.ts (Pages Router клиент)
import { createTRPCNext } from '@trpc/next';
import { httpBatchLink } from '@trpc/client';
import superjson from 'superjson';
import type { AppRouter } from '../server/trpc/router';

export const trpc = createTRPCNext<AppRouter>({
  config() {
    return {
      links: [
        httpBatchLink({
          url: '/api/trpc',
          transformer: superjson,
        }),
      ],
    };
  },
  ssr: false, // или true для SSR с prefetch
});
// pages/_app.tsx
import { trpc } from '../utils/trpc';

export default trpc.withTRPC(MyApp);

tRPC в Next.js App Router

App Router различает серверные и клиентские компоненты. Подход разный для каждого случая.

API Route Handler (app/api/trpc/[trpc]/route.ts)

// app/api/trpc/[trpc]/route.ts
import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
import { appRouter } from '../../../../server/trpc/router';
import { createContext } from '../../../../server/trpc/context';

const handler = (req: Request) =>
  fetchRequestHandler({
    endpoint: '/api/trpc',
    req,
    router: appRouter,
    createContext: () => createContext(req),
  });

export { handler as GET, handler as POST };

Серверные компоненты — прямые вызовы без HTTP

// app/posts/page.tsx (Server Component)
import { createCallerFactory } from '@trpc/server';
import { appRouter } from '../../server/trpc/router';
import { createContext } from '../../server/trpc/context';
import { headers } from 'next/headers';

const createCaller = createCallerFactory(appRouter);

export default async function PostsPage() {
  // Прямой вызов без HTTP-запроса
  const ctx = await createContext(new Request('http://internal', {
    headers: await headers(),
  }));
  const caller = createCaller(ctx);
  const posts = await caller.post.list({ limit: 10 });

  return (
    <ul>
      {posts.map((post) => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  );
}

Клиентские компоненты в App Router

// lib/trpc/client.ts
'use client';
import { createTRPCReact } from '@trpc/react-query';
import type { AppRouter } from '../../server/trpc/router';

export const trpc = createTRPCReact<AppRouter>();
// app/providers.tsx
'use client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { httpBatchLink } from '@trpc/client';
import superjson from 'superjson';
import { useState } from 'react';
import { trpc } from '../lib/trpc/client';

export function Providers({ children }: { children: React.ReactNode }) {
  const [queryClient] = useState(() => new QueryClient());
  const [trpcClient] = useState(() =>
    trpc.createClient({
      links: [
        httpBatchLink({
          url: '/api/trpc',
          transformer: superjson,
        }),
      ],
    })
  );

  return (
    <trpc.Provider client={trpcClient} queryClient={queryClient}>
      <QueryClientProvider client={queryClient}>
        {children}
      </QueryClientProvider>
    </trpc.Provider>
  );
}

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

  • В App Router нельзя использовать createTRPCNext (он для Pages Router) — это частая ошибка при миграции.
  • Файл с createTRPCReact должен иметь директиву 'use client' вверху, иначе Next.js выбросит ошибку о использовании клиентских API в Server Component.
  • Серверные компоненты не должны импортировать клиентский trpc-файл — создавайте отдельные файлы для серверного (createCallerFactory) и клиентского (createTRPCReact) кода.
  • При SSR в Pages Router с ssr: true данные сериализуются через dehydrate/hydrate — при использовании superjson нужно настроить трансформер и для этого слоя.
  • Route Handler в App Router (route.ts) должен экспортировать и GET, и POST — tRPC использует GET для queries и POST для mutations/batch.
  • createCallerFactory в Server Components не проходит через HTTP-middleware (CORS, rate limiting) — авторизацию нужно проверять в контексте явно.
  • Providers-компонент с QueryClient должен создавать новый экземпляр через useState, а не на уровне модуля — иначе данные будут шариться между запросами на сервере.

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

  • Чем tRPC отличается от REST и GraphQL? Когда стоит выбрать tRPC вместо них?
  • Как реализовать защищённые процедуры (protected procedures) с помощью middleware и context?
  • Как добавить валидацию входных данных к процедурам tRPC с помощью Zod?
  • В каких типах frontend-проектов tRPC даёт реальный выигрыш, а где будет избыточен или неудачен?

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

  • Смешивать «tRPC с Next.js» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «tRPC с Next.js» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

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

  • Объясняет интеграция с App Router, Pages Router, SSR и server components.
  • Показывает на примере, как работает: в Pages Router используют next adapter и SSR helpers, а в App Router важны route handlers, server/client component boundary и создание QueryClient без утечки между requests.
  • Называет production-нюанс и граничный случай для темы «tRPC с Next.js».

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

Проверить себя по теме tRPC →

Источники

  • https://trpc.io/docs/client/react/server-components
  • https://trpc.io/docs/client/nextjs/pages-router/ssr
←Предыдущий вопросЧто такое `links` в tRPC? Объясните `httpBatchLink`, `splitLink` и `loggerLink`.Следующий вопрос→В чём разница между `query`, `mutation` и `subscription` в tRPC?

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

tRPCfrontend-architecturenextjs