> Можно ли сделать общий стейт для формы, чтобы получать значения по имени поля (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Билайн

Стек: React

> Пример ответа

Да, это стандартная практика в React. Можно использовать единый объект состояния (state), где ключами выступают имена полей. Вот пример с функциональным компонентом и хуком useState:

JSX
import React, { useState } from 'react';
function MyForm() {
const [formState, setFormState] = useState({
username: '',
email: '',
password: ''
});
// Универсальный обработчик, получающий значение по имени поля
const handleChange = (e) => {
const { name, value } = e.target;
setFormState(prev => ({
...prev,
[name]: value
}));
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(formState); // { username: '...', email: '...', password: '...' }
};
return (
<form onSubmit={handleSubmit}>
<input name="username" value={formState.username} onChange={handleChange} />
<input name="email" value={formState.email} onChange={handleChange} />
<input name="password" type="password" value={formState.password} onChange={handleChange} />
<button type="submit">Отправить</button>
</form>
);
}

Преимущества подхода:

  • Единый источник правды (single source of truth) для всех полей.

  • Легко добавлять/удалять поля - достаточно обновить начальный state и разметку.

  • Упрощается валидация, отправка данных и сброс формы (просто вернуть начальный state).

Для сложных форм (много полей, вложенность, динамическое добавление) рекомендую использовать библиотеки вроде React Hook Form или Formik - они предоставляют готовый механизм управления состоянием по именам полей и оптимизируют ререндеры.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью