Библиотека MUI предоставляет мощные инструменты для работы с формами, среди которых FormControl и FormHelperText играют ключевую роль в организации и визуальном оформлении элементов ввода.
Компонент FormControl используется как контейнер для элементов формы, таких как Input, Select, Checkbox, Radio и другие. Он обеспечивает согласованное управление состоянием, правильное распределение стилей и взаимодействие с вспомогательными компонентами, такими как FormLabel и FormHelperText.
Основные свойства FormControl:
variant — определяет визуальный стиль элементов формы.
Поддерживаются варианты standard, outlined и
filled.error — логическое значение, которое указывает, что
текущий элемент формы находится в состоянии ошибки.disabled — блокирует все вложенные элементы ввода.fullWidth — заставляет элемент занимать всю ширину
родителя.margin — позволяет управлять внешними отступами,
например, none, dense,
normal.Пример использования:
import { FormControl, InputLabel, Input, FormHelperText } from '@mui/material';
<FormControl variant="outlined" fullWidth error={hasError}>
<InputLabel htmlFor="username">Имя пользователя</InputLabel>
<Input id="username" value={username} onCha nge={handleChange} />
<FormHelperText>{hasError ? 'Имя пользователя обязательно' : 'Введите ваше имя'}</FormHelperText>
</FormControl>
В данном примере FormControl управляет состоянием ошибки и визуально синхронизирует Input с FormHelperText.
Компонент FormHelperText используется для вывода подсказок, инструкций или сообщений об ошибках под элементами формы. Он автоматически наследует стили и цветовую схему из родительского FormControl, что обеспечивает согласованный интерфейс.
Основные свойства FormHelperText:
error — при значении true текст
окрашивается в цвет ошибки (обычно красный).id — связывает текст с элементом формы через атрибут
aria-describedby, что улучшает доступность.component — позволяет изменить HTML-элемент, например,
span или div.Пример использования с динамическим сообщением об ошибке:
<FormHelperText error={Boolean(errorMessage)} id="username-helper">
{errorMessage || 'Введите ваше имя'}
</FormHelperText>
FormControl имеет error={true}, вложенный
FormHelperText автоматически использует стиль ошибки, даже если
error не указан внутри него.aria-describedby. Это обеспечивает
корректное чтение подсказок и ошибок скринридерами.<FormControl error={username.length === 0}>
<InputLabel htmlFor="username">Имя пользователя</InputLabel>
<Input id="username" value={username} onCha nge={handleChange} />
<FormHelperText>
{username.length === 0 ? 'Поле не может быть пустым' : 'Допустимые символы: A-Z, 0-9'}
</FormHelperText>
</FormControl>
FormControl одинаково хорошо работает с Select, Checkbox и RadioGroup, обеспечивая единый подход к оформлению и валидации:
<FormControl component="fieldset" error={hasError}>
<FormLabel component="legend">Выберите опцию</FormLabel>
<RadioGroup value={selectedValue} onCha nge={handleChange}>
<FormControlLabel value="option1" control={<Radio />} label="Опция 1" />
<FormControlLabel value="option2" control={<Radio />} label="Опция 2" />
</RadioGroup>
<FormHelperText>{hasError ? 'Выберите хотя бы одну опцию' : 'Можно выбрать только одну'}</FormHelperText>
</FormControl>
Использование темы MUI позволяет централизованно управлять цветами FormHelperText и состояниями ошибок:
import { createTheme, ThemeProvider } fr om '@mui/material/styles';
const theme = createTheme({
components: {
MuiFormHelperText: {
styleOverrides: {
root: {
fontSize: '0.85rem',
color: '#1976d2', // кастомный цвет подсказок
},
},
},
},
});
<ThemeProvider theme={theme}>
<FormControl>
<InputLabel htmlFor="email">Email</InputLabel>
<Input id="email" />
<FormHelperText>Введите корректный email</FormHelperText>
</FormControl>
</ThemeProvider>
FormControl как
контейнер для Input, Select и Radio, чтобы обеспечить
согласованное управление состояниями.aria-describedby для
FormHelperText для улучшения доступности.error в
FormHelperText, если оно уже указано в FormControl, если нет
необходимости переопределить цвет.Эти компоненты формируют основу удобного и доступного интерфейса для ввода данных, обеспечивая гибкое управление состояниями, единый стиль и корректную обработку ошибок.