> Как понять, куда данные с формы будут отправлены в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ЛитРес
Стек: React
> Пример ответа
Короткий ответ
В React данные с формы отправляются туда, куда указывает обработчик события onSubmit на теге <form>. В отличие от vanilla HTML, React не использует атрибут action - вместо этого вы контролируете отправку через JavaScript, вызывая preventDefault() и затем отправляя данные на нужный endpoint через fetch, axios или другую HTTP-библиотеку. Куда именно - зависит от бизнес-логики в обработчике.
Подробное объяснение
В классическом HTML атрибут action на форме задаёт URL, на который браузер отправляет данные при сабмите. В React этот подход не применяется, потому что React - это SPA-фреймворк, где вся коммуникация с сервером происходит асинхронно через JavaScript, без перезагрузки страницы.
В React вы вешаете обработчик onSubmit на элемент <form>. Внутри этого обработчика:
- Вызываете
event.preventDefault()- это отключает стандартное поведение браузера (перезагрузку страницы и отправку наaction). - Собираете данные формы (из state, refs, или FormData).
- Отправляете их на нужный URL с помощью fetch, axios, или другого HTTP-клиента.
Куда именно отправляются данные - полностью определяется вашим кодом в обработчике. Это может быть:
- API-эндпоинт на вашем бэкенде
- Внешний сервис
- GraphQL endpoint
- WebSocket
- Локальное хранилище для тестирования
Атрибут action на <form> в React обычно не используется или устанавливается в пустую строку, так как он не имеет смысла при асинхронной отправке.
На практике
В реальных проектах отправка формы обычно выглядит так:
- Данные собираются из controlled components (через useState) или из uncontrolled (через useRef).
- В
onSubmitвызываетсяpreventDefault(). - Далее идёт валидация данных на клиенте.
- После успешной валидации - HTTP-запрос к API.
- Обработка ответа: показать успех, ошибку, редирект.
Если используется библиотека для форм (React Hook Form, Formik), она берёт на себя сбор данных и вызов onSubmit с уже подготовленными значениями.
Пример кода
JSXimport { useState } from 'react';function LoginForm() {const [email, setEmail] = useState('');const [password, setPassword] = useState('');const handleSubmit = async (event) => {event.preventDefault(); // отключаем стандартную отправкуconst formData = { email, password };try {const response = await fetch('/api/login', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(formData),});if (!response.ok) {throw new Error('Login failed');}const data = await response.json();console.log('Успешный вход:', data);} catch (error) {console.error('Ошибка отправки:', error);}};return (<form onSubmit={handleSubmit}><inputtype="email"value={email}onChange={(e) => setEmail(e.target.value)}required/><inputtype="password"value={password}onChange={(e) => setPassword(e.target.value)}required/><button type="submit">Войти</button></form>);}
Как отвечать на собеседовании
Начните с ключевого отличия: в React нет автоматической отправки на action, всё управляется через onSubmit и preventDefault(). Подчеркните, что разработчик сам решает, куда и как отправлять данные - это даёт гибкость, но требует явного указания endpoint в коде. Упомяните, что атрибут action технически можно использовать, но это антипаттерн в React, так как он вызывает перезагрузку страницы. Если спросят про server components или React 19 - можно добавить, что там появились новые возможности для форм, но принцип остаётся тем же.
Что проверяет интервьюер
Интервьюер проверяет:
- Понимание разницы между традиционным HTML-формами и React-подходом.
- Знание
event.preventDefault()и его роли. - Умение объяснить, как работает асинхронная отправка данных в SPA.
- Понимание controlled vs uncontrolled components в контексте форм.
- Осведомлённость о современных практиках (React Hook Form, Formik, server actions).
Типичные ошибки
- Забывают вызвать
event.preventDefault(), из-за чего страница перезагружается. - Пытаются использовать атрибут
actionна<form>в надежде, что React его обработает - это не работает, браузер всё равно делает полный редирект. - Путают
onSubmitна форме сonClickна кнопке - обработчик должен быть на форме, чтобы корректно обрабатывать сабмит через Enter. - Не обрабатывают ошибки сети или сервера - отправка считается успешной, даже если запрос упал.
- Используют синхронные запросы (например, через XMLHttpRequest без async/await) - это блокирует UI.
> Похожие задачи по frontend
Чем наполнить массив, создаваемый один раз и используемый в React компоненте
Изменится ли React функциональный компонент при вызове сеттера useState
Как построить приложение на React и Redux для обработки данных из веб-сокетов и отображения на UI
Что нового в React 19
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью