当前位置:首页 > React

react实现甘特图

2026-01-26 14:30:08React

使用 react-gantt-timeline 库

安装依赖库:

npm install react-gantt-timeline

基础实现代码:

import React from 'react';
import { Gantt } from 'react-gantt-timeline';

const tasks = [
  {
    id: 1,
    name: '任务1',
    start: new Date(2023, 0, 1),
    end: new Date(2023, 0, 5)
  },
  {
    id: 2,
    name: '任务2',
    start: new Date(2023, 0, 6),
    end: new Date(2023, 0, 10)
  }
];

function App() {
  return <Gantt tasks={tasks} />;
}

export default App;

使用 react-gantt 库

安装依赖:

npm install react-gantt

基础示例:

import React from 'react';
import Gantt from 'react-gantt';

const tasks = [
  { 
    id: 'Task 1',
    name: '开发',
    start: '2023-01-01',
    end: '2023-01-05'
  }
];

function App() {
  return (
    <Gantt
      tasks={tasks}
      viewMode={'week'}
      onTaskChange={task => console.log(task)}
    />
  );
}

自定义实现方案

使用HTML5 Canvas绘制:

import React, { useRef, useEffect } from 'react';

const GanttChart = ({ tasks }) => {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');

    // 绘制逻辑
    tasks.forEach((task, index) => {
      const y = index * 30 + 20;
      const width = (task.end - task.start) / (1000 * 60 * 60 * 24) * 10;

      ctx.fillStyle = '#4CAF50';
      ctx.fillRect(task.start, y, width, 20);
      ctx.fillStyle = '#000';
      ctx.fillText(task.name, task.start, y - 5);
    });
  }, [tasks]);

  return <canvas ref={canvasRef} width={800} height={400} />;
};

使用 D3.js 集成方案

安装D3依赖:

npm install d3

React组件实现:

import React, { useRef, useEffect } from 'react';
import * as d3 from 'd3';

const D3Gantt = ({ data }) => {
  const ref = useRef();

  useEffect(() => {
    const svg = d3.select(ref.current);
    // D3绘制甘特图逻辑
    svg.selectAll('rect')
      .data(data)
      .enter()
      .append('rect')
      .attr('x', d => xScale(d.start))
      .attr('y', (d,i) => i * 30)
      .attr('width', d => xScale(d.end) - xScale(d.start))
      .attr('height', 20);
  }, [data]);

  return <svg ref={ref} width={800} height={500} />;
};

关键功能实现要点

时间轴处理:

const xScale = d3.scaleTime()
  .domain([new Date(2023, 0, 1), new Date(2023, 1, 1)])
  .range([0, 800]);

任务依赖关系:

const tasks = [
  {
    id: 1,
    dependencies: [2] // 依赖任务ID
  }
];

交互功能实现:

const handleTaskClick = (task) => {
  console.log('Selected task:', task);
};

<GanttComponent 
  tasks={tasks}
  onTaskClick={handleTaskClick}
/>

react实现甘特图

标签: 甘特图react
分享给朋友:

相关文章

react native如何启动

react native如何启动

React Native 启动步骤 确保已安装 Node.js(建议版本 14 或更高)和 npm/yarn。安装完成后,通过命令行工具执行以下操作。 初始化新项目 使用 React Native…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react如何部署

react如何部署

部署 React 应用的常见方法 使用静态服务器部署 React 应用在构建后会生成静态文件,可以直接通过静态服务器部署。常用的静态服务器包括 Nginx、Apache 等。 运行构建命令生成静态…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…