DatePicker — это компонент библиотеки MUI,
предназначенный для выбора даты пользователем. Он является частью пакета
@mui/x-date-pickers, который предоставляет расширенные
возможности для работы с календарями и временем в приложениях на React.
DatePicker позволяет реализовать выбор даты в форме календаря, поле
ввода с маской или комбинацию этих вариантов.
Для использования DatePicker необходимо установить пакет:
npm install @mui/x-date-pickers
И подключить стили MUI, если они ещё не подключены:
import '@mui/material/styles';
import '@mui/x-date-pickers/DatePicker';
Импорт компонента и вспомогательных модулей выглядит следующим образом:
import * as React from 'react';
import TextField from '@mui/material/TextField';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
LocalizationProvider обеспечивает поддержку
локализации и правильное форматирование дат. В качестве адаптера обычно
используется AdapterDateFns, но доступны также
AdapterMoment и другие.
Компонент DatePicker оборачивается в
LocalizationProvider и может быть использован так:
function BasicDatePicker() {
const [value, setValue] = React.useState(null);
return (
setValue(newValue)}
renderInput={(params) => }
/>
);
}
Ключевые моменты:
value — текущее значение даты.onChange — обработчик изменений даты.renderInput — функция, которая возвращает текстовое
поле, в котором отображается выбранная дата.DatePicker поддерживает настройку формата даты и локализации через
свойства format и locale адаптера:
import { ru } from 'date-fns/locale';
setValue(newValue)}
inputFormat="dd.MM.yyyy"
renderInput={(params) => }
/>
inputFormat позволяет задать формат отображения
даты.locale={ru} при
инициализации AdapterDateFns.Можно ограничить диапазон дат с помощью свойств minDate
и maxDate:
setValue(newValue)}
minDate={new Date('2023-01-01')}
maxDate={new Date('2023-12-31')}
renderInput={(params) => }
/>
Также доступно свойство disablePast и
disableFuture для запрета выбора дат до текущего момента
или после него.
Для выбора диапазона используется компонент
DateRangePicker:
import { DateRangePicker } from '@mui/x-date-pickers-pro/DateRangePicker';
setDateRange(newRange)}
renderInput={(startProps, endProps) => (
<>
>
)}
/>
Диапазон представлен массивом [startDate, endDate].
Компонент автоматически обеспечивает выбор последовательных дат и
проверку корректности диапазона.
day,
month или year.["year", "month"] для выбора только
месяца и года.Пример с ограниченными уровнями выбора:
setValue(newValue)}
renderInput={(params) => }
/>
MUI позволяет настраивать внешний вид DatePicker через систему
sx или классы:
setValue(newValue)}
renderInput={(params) => (
)}
/>
Можно также использовать components и
componentsProps для замены частей UI, например, иконки
календаря или стрелок навигации.
Для проверки корректности даты используется свойство
onError:
setValue(newValue)}
onEr ror={(error) => console.log('Ошибка выбора даты:', error)}
renderInput={(params) => }
/>
Список возможных ошибок включает:
invalidDate — некорректная дата.minDate — дата меньше минимальной.maxDate — дата больше максимальной.disablePast / disableFuture — выбор
запрещённой даты.DatePicker удобно интегрируется с библиотеками для управления
формами, например, react-hook-form:
import { Controller, useForm } from 'react-hook-form';
const { control, handleSubmit } = useForm();
(
}
/>
)}
/>
Это позволяет автоматически валидировать и собирать данные формы вместе с другими полями.