Gernar
Frontend DeveloperReact

Интервью-вопрос

Что сможешь написать на React

Отвечайте через конкретные задачи, которые можете делать на React, и показывайте границы своего уровня. Главный риск в этом вопросе - звучать слишком общо или пообещать опыт, который потом не подтвердится техническими деталями.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 60 правильно

Как лучше начать ответ, если вас спрашивают, что вы можете написать на React?

Вы хотите звучать уверенно, но не обещать больше, чем реально умеете.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Это широкий вопрос про ваш практический уровень. Не отвечайте на него только списком технологий. Лучше покажите, какие продуктовые задачи вы можете закрывать на React и насколько самостоятельно вы это делаете.

Удобная структура короткого ответа:

  1. Назовите типы задач: компоненты, состояние, API, формы, маршруты, тесты, оптимизация.
  2. Дайте 1 конкретный пример из своего опыта или проекта.
  3. Обозначьте границы: что делали сами, где нужна помощь ревьюера или команды.

Так вы звучите спокойнее, чем с фразой "могу все", и даете понятный вход в технический разговор.

Как собрать ответ под свой опыт

Не выдумывайте задачи и цифры. Возьмите формулировку ниже как шаблон и замените детали на свои.

Если у вас есть похожий коммерческий опыт:

На React я делал компоненты для пользовательского интерфейса, формы с валидацией, загрузку данных из API и состояние экрана. Например, в одном проекте я отвечал за страницу со списком сущностей: фильтры, пагинация, loading и error states, сохранение выбранных параметров. Также писал тесты на ключевые сценарии и исправлял лишние рендеры после профилирования.

Если коммерческого опыта мало:

У меня пока небольшой коммерческий опыт с React, но я делал учебные или пет-проекты с компонентами, формами, роутингом и запросами к API. Я понимаю базовый жизненный цикл компонентов, зависимости эффектов, состояние загрузки и ошибки. Готов показать код и объяснить, какие решения там принял.

Не звучите как список библиотек. Один конкретный пример сильнее, чем десять названий без контекста.

Как выбрать формулировку

1Вас спрашивают широко и без деталей?
Дайте короткую карту задач: UI, состояние, API, формы, маршруты, тесты, оптимизация.
2У вас есть коммерческий опыт?
Назовите 1-2 реальные задачи, вашу роль и результат. Не уходите в длинную биографию.
3Опыта мало?
Скажите честно, что делали в учебных или пет-проектах, что понимаете, где вам нужна поддержка.
4Вас просят углубиться?
Выберите одну область и покажите детали: эффекты, формы, серверное состояние, тесты или производительность.

Что именно можно перечислить

В ответе можно назвать несколько областей. Не перечисляйте все подряд. Выберите то, что действительно делали.

  • Компоненты: декомпозиция UI, props, children, controlled и uncontrolled элементы.
  • Состояние: useState, useReducer, Context, внешние сторы, разделение локального и глобального состояния.
  • Данные с сервера: запросы, кеширование, loading, error, empty state, отмена запроса.
  • Формы: валидация, отправка, ошибки полей, блокировка кнопки на время запроса, связка label и поля.
  • Роутинг: страницы, параметры URL, защищенные маршруты, сохранение состояния фильтров в адресе.
  • Доступность: фокус после ошибки, работа с клавиатуры, понятные кнопки, alt для значимых изображений.
  • Безопасность клиента: не хранить токены где попало, не вставлять HTML из API без очистки, учитывать CSRF при cookie-based auth.
  • Производительность: профилирование, мемоизация, виртуализация длинных списков, lazy loading.
  • Тесты: проверка поведения компонента, пользовательских сценариев и критичной бизнес-логики.

Практический вывод: называйте не инструмент, а задачу и риск. Например, не просто "знаю useEffect", а "умею загружать данные в эффекте и слежу за зависимостями, отменой запроса и состояниями интерфейса".

Пример технической детали, которая усиливает ответ

Если вы говорите, что умеете загружать данные, будьте готовы показать безопасный вариант. Слабый ответ звучит так: "делаю fetch в useEffect и кладу результат в state". В нем не видно обработки ошибок, отмены запроса и состояния загрузки.

Что может сломаться: пользователь увидит вечный спиннер, старый ответ перезапишет новый экран, компонент попробует обновить состояние после ухода со страницы, а ошибка API останется без понятного сообщения. Безопаснее отменять неактуальный запрос, игнорировать устаревший ответ и явно показывать loading, error и empty state.

Пример более аккуратного подхода:

import { useEffect, useState } from "react";

function UsersList() {
  const [users, setUsers] = useState([]);
  const [status, setStatus] = useState("idle");
  const [error, setError] = useState(null);

  useEffect(() => {
    const controller = new AbortController();
    let isActive = true;

    async function loadUsers() {
      try {
        setStatus("loading");
        setError(null);

        const response = await fetch("/api/users", {
          signal: controller.signal,
        });

        if (!response.ok) {
          throw new Error("Failed to load users");
        }

        const data = await response.json();

        if (!isActive) return;

        setUsers(data);
        setStatus("success");
      } catch (err) {
        if (!isActive || err?.name === "AbortError") return;

        setError(err);
        setStatus("error");
      }
    }

    loadUsers();

    return () => {
      isActive = false;
      controller.abort();
    };
  }, []);

  if (status === "loading") {
    return <p role="status">Loading...</p>;
  }

  if (status === "error") {
    return <p role="alert">Could not load users</p>;
  }

  if (users.length === 0) return <p>No users yet</p>;

  return (
    <ul>
      {users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

Такой пример не нужно заучивать. Важно показать мысль: React-код живет в жизненном цикле компонента, а интерфейс должен нормально переживать загрузку, ошибку, пустой результат и уход со страницы.

Обратите внимание на вывод {user.name}. React экранирует текстовые значения, поэтому обычный вывод имени безопаснее, чем вставка HTML. Если API возвращает разметку и вы используете dangerouslySetInnerHTML без санитизации, это XSS-риск.

Как говорить про библиотеки

Упоминайте библиотеки только вместе с задачей. Иначе ответ превращается в набор ключевых слов.

Лучше так:

  • "Для сложных форм могу использовать React Hook Form, потому что он помогает с регистрацией полей, валидацией и производительностью больших форм".
  • "Для серверного состояния использовал бы TanStack Query или SWR, если нужны кеш, refetch, stale data и обработка статусов запроса".
  • "Для глобального клиентского состояния выбрал бы Context, Zustand или Redux Toolkit в зависимости от размера состояния, частоты обновлений и требований к отладке".

Осторожнее с фразой "я знаю библиотеку". На интервью ее быстро проверяют вопросами про edge cases: сброс формы, повторный запрос, инвалидирование кеша, лишние рендеры, восстановление состояния после ошибки.

Практический вывод

Лучший ответ на этот вопрос показывает не максимальную уверенность, а управляемую самостоятельность. Скажите, какие задачи берете сами, где попросите ревью, и какие риски проверяете перед релизом.

Короткая формула:

Я могу делать на React интерфейсные задачи от компонентов до работы с данными. Обычно думаю не только о верстке и хуках, но и о состояниях загрузки, ошибках, жизненном цикле эффектов, тестах и производительности. Если задача выходит за мой текущий опыт, я честно обозначу это и разберу решение через документацию, ревью и небольшой прототип.

Такая формулировка не делает вас экспертом во всем. Зато она показывает зрелый подход и снижает риск, что вас поймают на пустом перечислении технологий.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Обещать слишком широко

    Фраза "могу написать что угодно" звучит уверенно, но ее легко проверить уточняющим вопросом. Без примеров она выглядит как попытка закрыть пробелы. Лучше назовите конкретные типы задач и честно обозначьте, где у вас больше практики.
  2. 2

    Перечислять хуки без задач

    Список useState, useEffect, useMemo сам по себе не показывает ваш уровень. Интервью быстро перейдет к вопросу, когда и зачем вы их применяли. Привязывайте хуки к сценариям: форма, загрузка данных, подписка, тяжелое вычисление.
  3. 3

    Не говорить про состояния интерфейса

    Если вы говорите только про happy path, остается риск бесконечных спиннеров, пустых списков без текста и потерянных ошибок. Упомяните loading, error, empty state и повтор запроса, если это уместно.
  4. 4

    Смешивать все состояние в одно место

    Redux, Context или Zustand не должны быть ответом на любое состояние. Локальное состояние кнопки, данные с сервера и авторизация живут по разным правилам. Сильнее сказать, что вы сначала определяете тип состояния, а потом выбираете инструмент.
  5. 5

    Забывать про cleanup в эффектах

    Эффект с запросом, таймером или подпиской без очистки может дать гонку, утечку или обновление уже неактуального экрана. Безопаснее упомянуть AbortController, очистку подписок и внимательное отношение к зависимостям эффекта.
  6. 6

    Не упоминать доступность и безопасный вывод данных

    React-компонент может визуально работать, но быть неудобным для клавиатуры или скринридера. Для форм нужны связанные label, понятные ошибки и управление фокусом. Данные из API безопаснее выводить как текст. Если вставлять HTML через dangerouslySetInnerHTML без очистки, можно получить XSS.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми проверяют глубину вашего React-опыта.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание