Вопрос проверяет умение проектировать гибкую архитектуру фронтенда для рендеринга динамических форм на основе данных с бэкенда.
Динамическая форма — это форма, структура которой определяется данными, полученными с сервера. Вместо жестко закодированных полей мы описываем схему: массив объектов, каждый из которых содержит тип поля, имя, метку, правила валидации и другие параметры. Фронтенд интерпретирует эту схему и рендерит нужные компоненты.
Ключевой элемент — реестр компонентов (component registry). Это объект, где ключ — строковый тип поля (например, 'text', 'select', 'date'), а значение — React-компонент, который умеет отображать и управлять этим полем. При рендере мы проходим по схеме и для каждого поля достаем компонент из реестра.
const fieldRegistry = {
text: TextField,
select: SelectField,
date: DateField,
checkbox: CheckboxField
};
function DynamicForm({ schema }) {
const [values, setValues] = useState({});
return (
<form>
{schema.map(field => {
const Component = fieldRegistry[field.type];
return <Component
key={field.name}
field={field}
value={values[field.name]}
onChange={(val) => setValues({...values, [field.name]: val})}
/>;
})}
</form>
);
}Каждый компонент поля может содержать собственную логику валидации, либо мы используем общую схему валидации, где правила описаны в данных поля (например, required, minLength, pattern). При отправке собираем все значения и отправляем на сервер. Для сложных форм можно использовать библиотеки типа React Hook Form или Formik, которые хорошо работают с динамическими схемами.
Такой подход широко применяется в конструкторах опросов, админ-панелях, системах с настраиваемыми бизнес-процессами. Он позволяет менять форму без передеплоя фронтенда, добавлять новые типы полей, расширяя реестр, и легко поддерживать единообразие.
Итог: Используйте schema-driven подход с реестром компонентов, когда структура формы зависит от внешних данных. Это дает гибкость, масштабируемость и упрощает поддержку.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию