Библиотека MUI (Material-UI) предоставляет мощные средства для работы с форматированием чисел и дат, интегрируя возможности JavaScript с компонентами интерфейса. Основная цель — корректное отображение числовых и временных данных в удобочитаемом виде, учитывая локализацию пользователя и требования к стилю отображения.
LocalizationProviderДля корректного форматирования дат и чисел MUI использует компонент
LocalizationProvider, который оборачивает
дерево компонентов приложения и передает информацию о локали и
используемых форматах:
import * as React from 'react';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
function App() {
return (
<LocalizationProvider dateAdapter={AdapterDateFns} locale={ruLocale}>
<DatePicker
label="Выберите дату"
value={selectedDate}
onCha nge={(newValue) => setSelectedDate(newValue)}
/>
</LocalizationProvider>
);
}
Ключевые моменты:
dateAdapter определяет библиотеку для работы с датами
(например, date-fns, dayjs,
luxon).locale задаёт язык и формат отображения даты.DatePicker и DateTimePickerMUI предоставляет несколько компонентов для работы с датами:
DatePicker — выбор даты.TimePicker — выбор времени.DateTimePicker — комбинированный выбор
даты и времени.DesktopDatePicker и
MobileDatePicker — адаптивные версии для разных
устройств.Пример использования DateTimePicker с кастомным
форматом:
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
import { ru } from 'date-fns/locale';
<DateTimePicker
label="Дата и время"
value={dateTime}
onCha nge={(newValue) => setDateTime(newValue)}
inputFormat="dd.MM.yyyy HH:mm"
mask="__.__.____ __:__"
/>
Объяснение параметров:
inputFormat задаёт формат отображения в поле
ввода.mask помогает пользователю вводить данные в правильном
формате.ru обеспечивает отображение
названий месяцев и дней недели на русском языке.NumberFormat и интеграция с MUIДля чисел в MUI часто используют библиотеку
react-number-format (интеграция с компонентами
TextField):
import NumberFormat from 'react-number-format';
import TextField from '@mui/material/TextField';
function NumberFormatCustom(props) {
const { inputRef, onChange, ...other } = props;
return (
<NumberFormat
{...other}
getInputRef={inputRef}
onValueCha nge={(values) => onChange({ target: { value: values.value } })}
thousandSeparator=" "
decimalSeparator=","
isNumericString
prefix="₽ "
/>
);
}
<TextField
label="Сумма"
value={value}
onCha nge={(e) => setValue(e.target.value)}
InputProps={{
inputComponent: NumberFormatCustom,
}}
/>
Особенности форматирования чисел:
thousandSeparator добавляет разделитель тысяч.decimalSeparator определяет разделитель дробной
части.prefix и suffix позволяют добавить
валютный символ или единицы измерения.isNumericString гарантирует, что значение будет числом,
а не текстом.Форматирование чисел и дат легко объединяется с любыми компонентами MUI:
TextField — ввод чисел и дат с
кастомным форматом.Table и DataGrid —
отображение чисел с форматированием через renderCell.Typography — статический вывод
отформатированных данных.Пример форматирования чисел в DataGrid:
import { DataGrid } from '@mui/x-data-grid';
const columns = [
{ field: 'id', headerName: 'ID', width: 70 },
{ field: 'price', headerName: 'Цена', width: 130,
valueFormatter: ({ value }) => new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB' }).format(value)
},
];
Ключевой момент: valueFormatter
позволяет гибко управлять отображением данных без изменения самих
значений.
Intl.NumberFormat и Intl.DateTimeFormatMUI рекомендует нативные возможности JavaScript для форматирования:
const number = 1234567.89;
const formattedNumber = new Intl.NumberFormat('ru-RU', {
style: 'currency',
currency: 'RUB'
}).format(number);
const date = new Date();
const formattedDate = new Intl.DateTimeFormat('ru-RU', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
}).format(date);
Преимущества:
LocalizationProvider.valueFormatter для DataGrid
вместо прямого форматирования в данных.Intl для больших приложений,
чтобы уменьшить зависимость от сторонних библиотек.Форматирование чисел и дат в MUI обеспечивает унифицированный, локализованный и понятный интерфейс, минимизируя ошибки пользователя при вводе и облегчая разработку приложений с международной поддержкой.