Быстрый старт с React Scheduler
Этот туториал охватывает React-обёртку, входящую в выпуски DHTMLX Scheduler: Commercial, Enterprise и Ultimate. Если вы используете издания Individual или GPL, следуйте альтернативному руководству: Как начать работу с React.
Компонент React Scheduler — официальная обёртка для DHTMLX Scheduler. Это руководство проведёт вас через создание небольшого приложения на React и отображение базового Scheduler с использованием trial-пакета.
Если вы новичок в React, начните с официальной документации по React. Ознакомьтесь с полным рабочим проектом, соответствующим этому руководству, на GitHub.
Требования к версии
- React 18 и выше
Создание нового проекта на React
Чтобы создать проект на React и перейти в директорию проекта, выполните следующие команды:
npm create vite@latest react-scheduler-quick-start -- --template react-ts
cd react-scheduler-quick-start
Установка React Scheduler
Установите React Scheduler, как описано в руководстве по установке React Scheduler.
В этом руководстве мы используем evaluатion-пакет:
npm install @dhtmlx/trial-react-scheduler
или
yarn add @dhtmlx/trial-react-scheduler
Если вы уже используете пакет Professional, замените @dhtmlx/trial-react-scheduler на @dhx/react-scheduler в командах и импортах.
Добавление демонстрационных данных
Для этого примера мы будем использовать статические данные. Создайте файл с именем src/demoData.ts:
import type { Event } from '@dhtmlx/trial-react-scheduler';
export const events: Event[] = [
{
id: 1,
classname: 'blue',
start_date: new Date('2025-12-08T02:00:00Z'),
end_date: new Date('2025-12-08T10:20:00Z'),
text: 'Product Strategy Hike',
},
{
id: 2,
classname: 'blue',
start_date: new Date('2025-12-08T12:00:00Z'),
end_date: new Date('2025-12-08T16:00:00Z'),
text: 'Agile Meditation and Release',
},
{
id: 3,
classname: 'violet',
start_date: new Date('2025-12-09T06:00:00Z'),
end_date: new Date('2025-12-09T11:00:00Z'),
text: 'Tranquil Tea Time',
},
// ....
];
Создание компонента Scheduler
Чтобы добавить компонент Scheduler, создайте файл src/components/Scheduler/Scheduler.tsx со следующим содержимым:
import { useMemo, useRef } from 'react';
import ReactScheduler, {
type ReactSchedulerRef,
type Event,
type SchedulerTemplates,
type SchedulerConfig,
} from '@dhtmlx/trial-react-scheduler';
import '@dhtmlx/trial-react-scheduler/dist/react-scheduler.css';
import './styles.css';
export interface ReactSchedulerProps {
events: Event[];
activeView?: string;
activeDate?: Date;
}
export default function Scheduler({
events,
activeView = 'week',
activeDate = new Date('2025-12-08T00:00:00Z'),
}: ReactSchedulerProps) {
const schedulerRef = useRef<ReactSchedulerRef>(null);
const templates: SchedulerTemplates = useMemo(
() => ({
event_class: (start: Date, end: Date, event: Event) => {
return event.classname || '';
},
}),
[]
);
const config: SchedulerConfig = useMemo(() => {
return {
first_hour: 6,
last_hour: 22,
hour_size_px: 60,
};
}, []);
return (
<ReactScheduler
ref={schedulerRef}
events={events}
view={activeView}
date={activeDate}
templates={templates}
config={config}
data={{
save: (entity: string, action: string, data: Event, id: string | number) => {
console.log(`${entity} - ${action} - ${id}`, data);
},
}}
/>
);
}
Наконец, CSS-классы (.violet, .green, .yellow) применяются через шаблон event_class для настройки внешнего вида событий:
.violet {
--dhx-scheduler-event-background: linear-gradient(180deg, #d071ef 0%, #ee71d5 100%);
}
.green {
--dhx-scheduler-event-background: linear-gradient(180deg, #12d979 0%, #1ecdeb 100%);
}
.yellow {
--dhx-scheduler-event-background: linear-gradient(180deg, #ffb725 0%, #ffbb25 31.25%, #faea27 100%);
}
Отображение Scheduler в приложении
Чтобы отобразить Scheduler, замените код в src/App.tsx на следующий:
import './App.css';
import Scheduler from './components/Scheduler/Scheduler';
import { events } from './demoData';
function App() {
return (
<div style={{ width: '100vw', height: '100vh' }}>
<Scheduler events={events} />
</div>
);
}
export default App;
После этого запустите приложение с помощью следующей команды:
npm run dev
На данный момент у вас полностью работающее приложение на React + DHTMLX Scheduler.
Эта конфигурация представляет собой минимальную настройку, необходимую для:
- отрисовки Scheduler
- отображения событий
- применения базовой конфигурации масштаба
- прикрепления экземпляра Scheduler через React ref
- получения событий через обратный вызов
data.save
Это тот же минимальный пример, используемый в демонстрационном проекте на GitHub.
Далее вы можете продолжать, добавляя более продвинутые функции:
- синхронизацию данных с состоянием React
- загрузку/сохранение данных с вашего бэкенда
- добавление шаблонов и пользовательских ренд ереров
- добавление фильтрации
- замену Lightbox на собственный компонент
Следующие разделы поочерёдно вводят эти возможности.
Использование состояния React в качестве источника истины
(рекомендуется для большинства приложений на React)
В реальных приложениях события обычно поступают из состояния React.
Ниже приведён полный пример, в котором Scheduler отправляет изменения обратно в React через обратный вызов data.save.
import { useState } from 'react';
import ReactScheduler, { Event } from '@dhtmlx/trial-react-scheduler';
import '@dhtmlx/trial-react-scheduler/dist/react-scheduler.css';
import { events as initialEvents } from './demoData';
export default function App() {
const [events, setEvents] = useState<Event[]>(initialEvents);
const data = {
save: (entity, action, item, id) => {
if (entity === 'event') {
if (action === 'create') setEvents((prev) => [...prev, item]);
if (action === 'update') setEvents((prev) => prev.map((x) => (x.id === id ? item : x)));
if (action === 'delete') setEvents((prev) => prev.filter((x) => x.id !== id));
}
},
};
return (
<div style={{ height: '100vh', width: '100vw' }}>
<ReactScheduler
events={events}
data={data}
// ...other props
/>
</div>
);
}