В библиотеке MUI (Material-UI) обработка событий строится на стандартных механизмах React, но с учётом специфики компонентов MUI, которые часто являются обёртками над HTML-элементами с расширенным функционалом. Практически каждый компонент поддерживает набор событий, которые можно использовать для управления поведением интерфейса.
Компоненты, такие как Button, IconButton
или ListItem, предоставляют свойство onClick
для обработки нажатий:
import Button from '@mui/material/Button';
function Example() {
const handleClick = (event) => {
console.log('Кнопка была нажата', event);
};
return <Button onCl ick={handleClick}>Нажми меня</Button>;
}
event — объект события React SyntheticEvent, который
оборачивает нативное событие браузера.Select
или Menu), поэтому для сложных компонентов может
потребоваться использование дополнительных свойств, таких как
onChange или onClose.Для компонентов ввода данных (TextField,
Select, Checkbox, Switch)
используется событие onChange:
import TextField from '@mui/material/TextField';
import { useState } from 'react';
function ControlledInput() {
const [value, setValue] = useState('');
const handleChange = (event) => {
setValue(event.target.value);
};
return <TextField value={value} onCha nge={handleChange} label="Введите текст" />;
}
event.target.value содержит текущее значение поля.Select с
multiple) или чекбоксов часто требуется обработка массивов
значений.Компоненты MUI поддерживают события onFocus и
onBlur для отслеживания активации и выхода из поля
ввода:
<TextField
label="Фокус"
onFo cus={() => console.log('Поле в фокусе')}
onB lur={() => console.log('Поле потеряло фокус')}
/>
Эти события особенно полезны для валидации данных или изменения стилей в зависимости от состояния компонента.
Для компонентов ввода можно использовать события клавиатуры:
onKeyDown, onKeyUp,
onKeyPress:
<TextField
label="Нажмите Enter"
onKeyD own={(event) => {
if (event.key === 'Enter') {
console.log('Enter был нажат');
}
}}
/>
event.key позволяет определить конкретную клавишу.Autocomplete или навигации в
Menu.Некоторые компоненты MUI имеют уникальные события:
Autocomplete — onInputChange,
onChangeSlider — onChange,
onChangeCommittedSwitch — onChangeПример для Slider:
import Slider from '@mui/material/Slider';
import { useState } from 'react';
function SliderExample() {
const [value, setValue] = useState(30);
const handleChange = (event, newValue) => {
setValue(newValue);
};
return <Slider value={value} onCha nge={handleChange} aria-label="Слайдер" />;
}
onChange вызывается при каждом изменении значения.onChangeCommitted срабатывает только после завершения
перемещения ползунка.Компоненты MUI часто являются комбинацией элементов (например,
Select внутри FormControl). В таких случаях
необходимо учитывать два уровня событий:
FormControl) для управления состоянием формы.Select) для
отслеживания конкретного действия пользователя.import Sel ect from '@mui/material/Sel ect';
import MenuItem fr om '@mui/material/MenuItem';
import FormControl fr om '@mui/material/FormControl';
function SelectExample() {
const [value, setValue] = useState('');
const handleChange = (event) => {
setValue(event.target.value);
};
return (
<FormControl>
<Select value={value} onCha nge={handleChange}>
<MenuItem value="one">Один</MenuItem>
<MenuItem value="two">Два</MenuItem>
</Select>
</FormControl>
);
}
Для сложных интерфейсов часто используют делегирование событий. В MUI
это достигается через пропсы on* на контейнерных
компонентах, а также с помощью event.stopPropagation() и
event.preventDefault() для управления всплытием и
поведением по умолчанию.
<Button
onCl ick={(event) => {
event.preventDefault();
console.log('Действие по умолчанию остановлено');
}}
>
С остановкой действия по умолчанию
</Button>
value +
onChange) для синхронизации состояния интерфейса и
React-стейта.useCallback, чтобы избежать
лишних рендеров.Dialog,
Popover) учитывать события закрытия (onClose)
для корректного управления состоянием.Обработка событий в MUI позволяет создавать интерактивные, отзывчивые и удобные пользовательские интерфейсы, при этом полностью интегрированные с экосистемой React.