Schnellstart mit React Gantt
Dieses Tutorial behandelt den React-Wraper, der in den Commercial, Enterprise und Ultimate Editionen von DHTMLX Gantt enthalten ist. Falls Sie die Individual- oder GPL-Edition verwenden, folgen Sie der alternativen Anleitung: How to Start with React.
Die React Gantt-Komponente ist der offizielle Wrapper für DHTMLX Gantt. Diese Anleitung führt Sie durch das Erstellen einer kleinen React-Anwendung und das Rendern eines grundlegenden Gantt-Diagramms mit dem Trial-Paket.
Wenn Sie neu bei React sind, beginnen Sie mit der offiziellen React-Dokumentation. Prüfen Sie ein vollständiges funktionsfähiges Projekt, das dieser Anleitung folgt, auf GitHub.
Versionsanforderungen
- React 18 oder neuer
Erstellen eines neuen React-Projekts
Um ein React-Projekt zu erstellen und in das Projektverzeichnis zu wechseln, führen Sie die folgenden Befehle aus:
npm create vite@latest react-gantt-quick-start -- --template react-ts
cd react-gantt-quick-start
Installation von React Gantt
Installieren Sie React Gantt wie in der React Gantt-Installationsanleitung beschrieben.
In diesem Tutorial verwenden wir das Evaluierungspaket:
npm install @dhtmlx/trial-react-gantt
oder
yarn add @dhtmlx/trial-react-gantt
Wenn Sie bereits das Professional-Paket verwenden, ersetzen Sie @dhtmlx/trial-react-gantt durch @dhx/react-gantt in den Befehlen und Importen.
Demo-Daten hinzufügen
Wir verwenden statische Daten für dieses Beispiel. Erstellen Sie eine Datei namens src/demoData.ts:
import type { Task, Link } from '@dhtmlx/trial-react-gantt';
export const tasks: Task[] = [
{ id: 1, text: "Office itinerancy", type: "project", start_date: new Date(2025, 3, 2), duration: 17, progress: 0.4, parent: 0, open: true },
...
];
export const links: Link[] = [
{ id: 2, source: 2, target: 3, type: "0" },
...
];
Erstellung einer Gantt-Komponente
Um eine Gantt-Komponente hinzuzufügen, erstellen Sie eine Datei src/components/Gantt/Gantt.tsx mit folgendem Inhalt:
import Gantt, {
ReactGanttRef,
Task,
Link,
GanttConfig
} from '@dhtmlx/trial-react-gantt';
import '@dhtmlx/trial-react-gantt/dist/react-gantt.css';
import { useRef } from 'react';
export interface GanttProps {
tasks: Task[];
links: Link[];
}
export default function GanttChart({ tasks, links }: GanttProps) {
const ganttRef = useRef<ReactGanttRef>(null);
const config: GanttConfig = {
grid_width: 500,
scale_height: 90,
scales: [
{ unit: "year", step: 1, date: "%Y" },
{ unit: "month", step: 1, date: "%M" },
{ unit: "day", step: 1, date: "%d %M" }
]
};
return (
<Gantt
ref={ganttRef}
tasks={tasks}
links={links}
config={config}
data={{
save: (entity, action, data, id) => {
console.log(`${entity} - ${action} - ${id}`, data);
}
}}
/>
);
}
Rendering Gantt in der App
Um Gantt anzuzeigen, ersetzen Sie den Code von src/App.tsx durch den folgenden:
import GanttChart from './components/Gantt/Gantt';
import { tasks, links } from './demoData';
export default function App() {
return (
<div style={{ height: "100vh", width: "100vw" }}>
<GanttChart tasks={tasks} links={links} />
</div>
);
}
Führen Sie anschließend die App mit dem folgenden Befehl aus:
npm run dev
An diesem Punkt haben Sie eine voll funktionsfähige React + DHTMLX Gantt-Anwendung.
Dies entspricht der minimale Konfiguration, die benötigt wird, um:
- ein Gantt-Diagramm zu rendern
- Aufgaben und Verbindungen anzuzeigen
- eine grundlegende Skalenkonfiguration anzuwenden
- die Gantt-Instanz über eine React-Ref anzuhängen
- Ereignisse über den
data.save-Callback zu empfangen
Dies ist dasselbe minimale Beispiel, das im GitHub-Demo-Projekt verwendet wird.
Von hier aus können Sie fortfahren, indem Sie weitere fortgeschrittene Funktionen hinzufügen:
- Synchronisierung von Daten mit dem React-State
- Laden/Speichern von Daten aus Ihrem Backend
- Vorlagen und benutzerdefinierte Renderers hinzufügen
- Plugins aktivieren (Auto-Scheduling, Critical Path)
- Ressourcen, Kalender oder Gruppierung hinzufügen
Die nächsten Abschnitte führen diese Funktionen der Reihe nach ein.
Verwendung von React-Zustand als Quelle der Wahrheit
(empfohlen für die meisten React-Apps)
In realen Anwendungen stammen Aufgaben und Links normalerweise aus dem React-Zustand.
Nachfolgend ein vollständiges Beispiel, bei dem Gantt Änderungen zurück an React sendet über den data.save-Callback.
import { useState } from "react";
import Gantt from "@dhtmlx/trial-react-gantt";
import "@dhtmlx/trial-react-gantt/dist/react-gantt.css";
import { tasks as initialTasks, links as initialLinks } from "./demoData";
export default function App() {
const [tasks, setTasks] = useState(initialTasks);
const [links, setLinks] = useState(initialLinks);
return (
<div style={{ height: "100vh" }}>
<Gantt
tasks={tasks}
links={links}
data={{
save: (entity, action, item, id) => {
if (entity === "task") {
if (action === "create") setTasks(tasks => [...tasks, item]);
if (action === "update") setTasks(tasks => tasks.map(x => x.id === id ? item : x));
if (action === "delete") setTasks(tasks => tasks.filter(x => x.id !== id));
}
if (entity === "link") {
if (action === "create") setLinks(links => [...links, item]);
if (action === "update") setLinks(links => links.map(x => x.id === id ? item : x));
if (action === "delete") setLinks(links => links.filter(x => x.id !== id));
}
}
}}
/>
</div>
);
}
Warum diese Variante
- React sieht immer dieselben Daten wie die Gantt-Oberfläche
- Funktioniert perfekt mit Redux / Zustand / Jotai / MobX
- Einfach, mit Backend-APIs zu synchronisieren
Alternative Mode: Gantt als Quelle der Wahrheit
(nützlich für sehr große Datensätze oder starke Auto-Scheduling)
In diesem Modus besitzt React keine Aufgaben/Verbindungen.
<Gantt
data={{
load: "/api/gantt-data",
save: "/api/gantt-data"
}}
/>
Wann diese Modus bevorzugen
- Zehntausende von Aufgaben
- Viele Auto-Scheduling-Updates
- Sie möchten minimalen React-Rendering-Overhead
Vorlagen verwenden
(React-Elemente aus Template-Funktionen zurückgeben)
Templates ermöglichen die Anpassung fast jedes Teils des Diagramms.
const templates = {
task_text: (start, end, task) => (
<span style={{ color: "red" }}>#{task.id}: {task.text}</span>
)
};
<Gantt templates={templates} />
Weitere Details
Siehe den vollständigen Abschnitt hier: React Gantt Templates Documentation.
GitHub-Demo-Repository
Ein vollständiges funktionsfähiges Projekt, das dieser Anleitung folgt, wird auf GitHub bereitgestellt.
Nächste Schritte
- Studieren Sie alle verfügbaren React Gantt-Eigenschaften
- Erkunden Sie fortgeschrittene Gantt-Funktionen in den Guides