dhtmlxScheduler 与 React 集成指南
本指南假定您已基本了解 React 的相关概念和模式。如果您是 React 新手,建议先阅读 React 官方文档 入门教程。
DHTMLX Scheduler 可以很好地与 React 集成。您可以在 GitHub 上找到相关示例:DHTMLX Scheduler with React Demo。
创建项目
在创建项目之前,请确保已安装 Node.js。
要搭建一个简单的 React 项目,请运行以下命令:
npx create-vite my-react-scheduler-app --template react
安装依赖
接下来,进入您的应用目录。本例中使用 my-react-scheduler-app:
cd my-react-scheduler-app
然后使用您喜欢的包管理器安装依赖并启动开发服务器:
- 如果使用 yarn,运行:
yarn install
yarn dev
- 如果使用 npm,运行:
npm install
npm run dev
您的 React 项目现在应该可以通过 http://localhost:5173 访问。

创建 Scheduler
要添加 DHTMLX Scheduler,首先通过命令行按 Ctrl+C 停止应用。然后继续安装 Scheduler 包。
步骤 1. 安装包
库的 PRO 版本可通过我们的私有仓库使用 npm/yarn 获取。请参考 此说明 获取访问权限。
获得 Scheduler 的 Evaluation 版本后,使用以下命令之一安装:
- 使用 npm:
npm install @dhx/trial-scheduler
- 使用 yarn:
yarn add @dhx/trial-scheduler
另外,由于库的 zip 包结构与 npm 模块兼容,您也可以 从本地文件夹安装。
步骤 2. 创建组件
接下来,创建一个 React 组件用于在应用中集成 Scheduler。新建文件夹 src/components/Scheduler,并在其中创建以下文件:Scheduler.jsx、Scheduler.css 和 index.js。
首先创建 Scheduler.css,为 scheduler-container 添加样式:
.scheduler-container {
height: 100vh;
width: 100vw;
}
为确保 Scheduler 容器填满整个页面,请删除 src 文件夹下 App.css 的默认样式,并添加如下内容:
#root {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}
然后添加 index.js 文件,内容如下:
import Scheduler from './Scheduler';
import './Scheduler.css';
export default Scheduler;
导入源文件
打开 Scheduler.jsx 并导入 Scheduler 源文件。根据您安装包的方式,导入代码如下:
- 如果从本地文件夹安装:
import { Scheduler } from 'dhtmlx-scheduler';
import 'dhtmlx-scheduler/codebase/dhtmlxscheduler.css';
- 如果使用 trial 版本:
import { Scheduler } from '@dhx/trial-scheduler';
import '@dhx/trial-scheduler/codebase/dhtmlxscheduler.css';
本教程使用 trial 版本。
设置容器并添加 Scheduler
要在页面上渲染 Scheduler,需要设置一个容器。创建 Scheduler.jsx,内容如下:
import { useEffect, useRef } from "react";
import { Scheduler } from "@dhx/trial-scheduler";
import "@dhx/trial-scheduler/codebase/dhtmlxscheduler.css";
export default function SchedulerView( ) {
let container = useRef();
useEffect(() => {
let scheduler = Scheduler.getSchedulerInstance();
scheduler.skin = "terrace";
scheduler.config.header = [
"day",
"week",
"month",
"date",
"prev",
"today",
"next",
];
scheduler.init(container.current, new Date(2024, 5, 10));
return () => {
scheduler.destructor();
container.current.innerHTML = "";
};
}, []);
return (
<div ref="{container}" style={{}} width: "100%", height: "100%" }}></div>
);
}