Компонент Calendar из библиотеки Ant Design представляет собой мощный инструмент для отображения календарных данных и организации событий. Он построен на основе React и полностью интегрируется с экосистемой Ant Design, обеспечивая единый стиль интерфейса и гибкость настройки.
import { Calendar } from 'antd';
Базовое использование компонента выглядит следующим образом:
<Calendar />
В этом виде компонент отобразит календарь текущего месяца с возможностью переключения между месяцами и годами.
Calendar поддерживает два основных типа отображения:
<Calendar fullscreen={false} mode="month" />
Параметр fullscreen={false} позволяет отображать
календарь в компактной форме, что полезно для интеграции в панели
управления и виджеты.
Для отслеживания выбора даты используется событие
onSelect, которое возвращает объект
moment:
import moment from 'moment';
const onSel ect = (value) => {
console.log('Выбранная дата:', value.format('YYYY-MM-DD'));
};
<Calendar onSel ect={onSelect} />
Также доступно событие onPanelChange, которое
срабатывает при смене месяца или года:
const onPanelCha nge = (value, mode) => {
console.log('Новая панель:', mode, 'Дата:', value.format('YYYY-MM-DD'));
};
<Calendar onPanelCha nge={onPanelChange} />
Эти события позволяют реализовать динамическое обновление данных в зависимости от выбранного периода.
Ant Design предоставляет возможность кастомизировать отображение
каждого дня через функцию dateCellRender и
отображение месяца через monthCellRender.
const dateCellRender = (value) => {
const listData = getListData(value); // функция возвращает события для даты
return (
<ul className="events">
{listData.map(item => (
<li key={item.content}>{item.content}</li>
))}
</ul>
);
};
<Calendar dateCellRender={dateCellRender} />
Функция getListData может возвращать список событий или
задач для конкретного дня. Это позволяет строить календарь с
событиями, отображая их прямо внутри ячеек.
const monthCellRender = (value) => {
const num = getMonthData(value); // функция возвращает статистику для месяца
return num ? <div className="notes-month">{num} событий</div> : null;
};
<Calendar monthCellRender={monthCellRender} />
Использование этих функций открывает возможности для реализации календаря задач, встреч или KPI-панели.
С помощью свойства disabledDate можно запретить выбор
определённых дат. Например, запретить выбор прошлых дат:
const disabledDate = (current) => {
return current && current < moment().startOf('day');
};
<Calendar disabledDate={disabledDate} />
current — это объект moment, представляющий текущую
ячейку календаря. Функция должна возвращать true для
запрещённых дат.
Компонент поддерживает контролируемое состояние
через свойство value:
const [date, setDate] = useState(moment());
<Calendar
value={date}
onSel ect={setDate}
/>
Это позволяет синхронизировать календарь с внешними компонентами и состоянием приложения.
Ant Design использует библиотеку moment для работы с локализацией. Для смены языка календаря необходимо импортировать нужную локализацию:
import locale from 'antd/es/locale/ru_RU';
import { ConfigProvider } from 'antd';
<ConfigProvider locale={locale}>
<Calendar />
</ConfigProvider>
После этого названия месяцев, дней недели и формат даты будут отображаться на русском языке.
import React, { useState } from 'react';
import { Calendar, Badge, ConfigProvider } from 'antd';
import locale from 'antd/es/locale/ru_RU';
import moment from 'moment';
const getListData = (value) => {
let listData;
switch(value.date()){
case 8:
listData = [{ content: 'Встреча с командой' }];
break;
case 10:
listData = [{ content: 'Дедлайн проекта' }];
break;
default:
listData = [];
}
return listData || [];
};
const dateCellRender = (value) => {
const listData = getListData(value);
return (
<ul>
{listData.map(item => (
<li key={item.content}>
<Badge status="success" text={item.content} />
</li>
))}
</ul>
);
};
const MyCalendar = () => {
const [selectedDate, setSelectedDate] = useState(moment());
return (
<ConfigProvider locale={locale}>
<Calendar
value={selectedDate}
onSel ect={setSelectedDate}
dateCellRender={dateCellRender}
fullscreen={false}
/>
</ConfigProvider>
);
};
export default MyCalendar;
В этом примере реализован календарь с отображением событий и выбором даты, локализованный на русский язык, с компактным отображением и визуальной индикацией через Badge.
value обеспечивает синхронизацию состояния с другими
частями приложения.disabledDate и onPanelChange позволяют
гибко управлять взаимодействием пользователя с календарем.Эти инструменты делают Ant Design Calendar универсальным компонентом для создания как простых, так и сложных календарных интерфейсов.