React Scheduler - MobX 教程
本教程展示如何在 Vite + React + TypeScript 应用中渲染 DHTMLX React Scheduler,并由一个 MobX 存储驱动它。 到最后,你将拥有一个可用的 Scheduler,支持 创建/更新/删除、视图与日期导航、对事件变更的基于快照的撤销/重做,以及一个 只读 开关。
注释
完整源代码可在 GitHub 上获取。
你将构建:
- 一个拥有
events、当前view与date的 MobX 存储 - 一个将 Scheduler 编辑转换成存储操作的
data.save桥接 - 一个简单的工具栏(视图、导航、撤销/重做、只读切换),位于 Scheduler 之上
先决条件
- 具备 React、TypeScript、Vite 和 MobX 的基础知识
- 建议:阅读 Data Binding & State Management Basics,以理解本教程所基于的数据绑定模式及
data.save回调。
快速上手 - 创建项目
在这一步中,我们将创建一个 Vite 项目、安装依赖并验证应用运行状态。
操作:
- 创建一个 Vite React + TypeScript 项目
- 安装 MobX + UI 相关 依赖
- 安装 React Scheduler(试用包)
- 移除 Vite 的默认
App.css样式,以便 Scheduler 能填充视口
在开始之前,请安装 Node.js。
创建 Vite React + TypeScript 项目:
npm create vite@latest react-scheduler-mobx-demo -- --template react-ts
cd react-scheduler-mobx-demo
现在安装所需的依赖。
- 对于 npm:
npm install mobx mobx-react-lite @mui/material @mui/icons-material @emotion/react @emotion/styled
- 对于 yarn:
yarn add mobx mobx-react-lite @mui/material @mui/icons-material @emotion/react @emotion/styled
安装 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。
现在可以启动开发服务器:
npm run dev
现在你应该可以在 http://localhost:5173 看到你的 React 项目在运行。
注释
为使 Scheduler 占满页面,请移除 src/App.css 的默认 Vite 样式。
将 src/App.css 更新为以下内容。
src/App.css
#root, body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}
设置示例数据
在这一步中,我们将为 Scheduler 创建确定性的种子数据,使演示在每次运行时都看起来一致。
操作:
- 创建
src/seed/data.ts,包含少量事件 - 导出初始的
view与date,使 Scheduler 从一个可预测的状态开始
创建 src/seed/data.ts:
src/seed/data.ts
export type SchedulerView = "day" | "week" | "month";
export interface SeedEvent {
id: string | number;
start_date: string;
end_date: string;
text: string;
}
export const seedEvents: SeedEvent[] = [
{ id: 1, start_date: "2025-08-11T02:00:00Z", end_date: "2025-08-11T10:20:00Z", text: "Product Strategy Hike" },
{ id: 2, start_date: "2025-08-12T06:00:00Z", end_date: "2025-08-12T11:00:00Z", text: "Tranquil Tea Time" },
{ id: 3, start_date: "2025-08-15T03:00:00Z", end_date: "2025-08-15T08:00:00Z", text: "Demo and Showcase" },
];
export const seedDate = Date.parse("2025-08-15T00:00:00Z");
export const seedView: SchedulerView = "week";
注释
配套演示还包含额外事件,以获得更丰富的视觉效果。