当前位置:首页 > 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 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: nod…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

vue实现甘特图

vue实现甘特图

Vue 实现甘特图的方法 使用开源库(推荐) Vue-Ganttastic 是一个专为 Vue 设计的轻量级甘特图库,支持拖拽、缩放和自定义样式。安装后可直接嵌入组件: npm install v…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yar…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…