Перейти к основному содержимому

React Scheduler с Next.js

Это руководство показывает, как создать простое приложение на Next.js и отобразить DHTMLX React Scheduler на странице.

примечание

Полный исходный код доступен на GitHub.

Требования

  • Node.js (рекомендуется LTS)
  • основы React + TypeScript
  • основы Next.js (App Router, Server/Client Components). Если нужен повтор, см. документацию Next.js: https://nextjs.org/docs

Быстрая настройка — создание проекта

Чтобы сгенерировать каркас приложения Next.js, выполните:

npx create-next-app@latest

При запросе выберите:

  • Название проекта: react-scheduler-nextjs-quick-start
  • Использовать шаблон по умолчанию (TypeScript, ESLint, Tailwind CSS, App Router, Turbopack)

Next.js создаст структуру проекта и установит базовые зависимости.

После установки перейдите в директорию проекта:

cd react-scheduler-nextjs-quick-start

Установка React Scheduler

Установите React Scheduler, как описано в руководстве по установке React Scheduler.

В этом руководстве мы используем демонстрационный пакет:

npm install @dhtmlx/trial-react-scheduler

или

yarn add @dhtmlx/trial-react-scheduler

Если вы уже используете Professional пакет, замените @dhtmlx/trial-react-scheduler на @dhx/react-scheduler в командах и импортах.

Подготовка демонстрационных данных

Создайте папку data/ в корне проекта. Внутри нее добавьте файл demoData.ts, содержащий начальные данные для Scheduler:

data/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',
},
{
id: 4,
classname: 'green',
start_date: new Date('2025-12-09T11:30:00Z'),
end_date: new Date('2025-12-09T19:00:00Z'),
text: 'Sprint Review and Retreat',
},
{
id: 5,
classname: 'yellow',
start_date: new Date('2025-12-10T06:00:00Z'),
end_date: new Date('2025-12-10T08:00:00Z'),
text: 'Stakeholder Sunset Yoga Session',
},
];
примечание

Сопутствующая демо-версия включает дополнительные события для более богатой визуализации.

Создание компонента Scheduler

Next.js по умолчанию использует Server Components, но React Scheduler в большинстве практических случаев следует рендерить внутри Client Component.

Это требуется, когда вы:

  • используете ref для доступа к экземпляру Scheduler
  • передаете колбэки (events, templates, data handlers)
  • используете ReactScheduler hooks
  • предоставляете динамическую конфигурацию или элементы React

Поэтому наш компонент Scheduler будет начинаться с "use client".

Создайте новый файл по пути components/Scheduler/Scheduler.tsx:

components/Scheduler/Scheduler.tsx
'use client';

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';

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);
},
}}
/>
);
}

Этот компонент инициализирует Scheduler и предоставляет ему конфигурацию, начальные данные и ref для будущих вызовов API. Объект config управляет макетом временной шкалы, в то время как свойства events задают набор данных Scheduler. Мы также передаем activeView и activeDate как свойства, чтобы родительский компонент управлял тем, что отображает Scheduler.

Функция save, находящаяся внутри пропа data, используется для отслеживания изменений, внесённых в события внутри Scheduler. В этом руководстве мы добавляем простой обработчик-заглушку для отслеживания изменений. Если вы хотите отправлять обновления на бэкенд или связывать их со состоянием React, вы можете следовать официальному руководству по привязке данных guide.

Добавление стилей цвета событий

CSS-классы (.blue, .violet, .green, .yellow) применяются через шаблон event_class для настройки визуального вида событий. Добавьте следующее в app/globals.css:

app/globals.css
.blue {
--dhx-scheduler-event-background: linear-gradient(180deg, #0e8af0 0%, #0ec1f0 100%);
}
.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 занимал всю страницу максимально чисто, удалите переменные темы по умолчанию для тёмного режима из app/globals.css и убедитесь, что у body нет лишних отступов (margin):

body {
margin: 0;
padding: 0;
}

Добавление Scheduler на страницу

Откройте app/page.tsx и отобразите Scheduler на главной странице:

app/page.tsx
import Scheduler from '../components/Scheduler/Scheduler';
import { events } from '../data/demoData';

export default function HomePage() {
return (
<div style={{ height: '100vh', width: '100vw' }}>
<Scheduler events={events} />
</div>
);
}

Теперь страница будет отображать полноэкранный Scheduler.

Запуск приложения

Запустите сервер разработки:

npm run dev

Затем откройте http://localhost:3000 в вашем браузере. Вы увидите работающий Scheduler с начальными данными внутри приложения Next.js.

Резюме

У вас now есть минимальный проект на Next.js с DHTMLX React Scheduler:

  • Scheduler рендерится как Client Component ("use client") внутри App Router Next.js
  • демо-данные загружаются из отдельного файла и передаются как пропсы
  • шаблон event_class применяет настраиваемые цветовые градиенты к событиям
  • обратный вызов data.save регистрирует правки в консоли (готов к интеграции с бэкендом)

Что дальше

Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.