react-diagrams版本迁移指南:从v1到v2的核心变化

react-diagrams版本迁移指南:从v1到v2的核心变化

【免费下载链接】react-diagrams a super simple, no-nonsense diagramming library written in react that just works 【免费下载链接】react-diagrams 项目地址: https://gitcode.com/gh_mirrors/re/react-diagrams

你还在为react-diagrams版本升级而烦恼吗?本文将详细介绍从v1到v2的核心变化,帮助你快速完成迁移。读完你将了解包结构调整、API变更、依赖管理优化等关键内容,并掌握实际迁移步骤和常见问题解决方案。

包结构重构

react-diagrams v2采用了monorepo结构,将原有的单一包拆分为多个独立功能包,使代码组织更清晰,依赖管理更灵活。主要包含以下包:

  • @projectstorm/react-canvas-core:核心画布功能,提供基础的画布渲染和交互支持
  • @projectstorm/react-diagrams-core:图表核心功能,定义节点、链接等基础模型
  • @projectstorm/react-diagrams-defaults:默认组件实现,提供常用的节点、链接和端口样式
  • @projectstorm/react-diagrams-routing:链接路由功能,支持智能布线和路径查找

这种拆分使你可以根据需求选择性引入包,减少不必要的依赖。例如,如果你只需要基础的图表功能,可以只引入core和defaults包。

依赖管理优化

v2版本在依赖管理方面有重大改进:

  1. 移除peer dependencies:v1版本大量使用peer dependencies,导致版本冲突和安装问题。v2将依赖项移回各个包内部,由package manager自动处理版本兼容性。

  2. 使用workspace协议:内部包之间的依赖采用workspace协议声明,如"@projectstorm/react-canvas-core": "workspace:*",简化了开发和发布流程。

  3. 升级核心依赖:全面升级所有依赖项,包括React 18和Emotion 11,提升性能和兼容性。

重大API变更

1. 模型创建方式

v1版本:

import { Diagram, Node, Port } from 'storm-react-diagrams';

const node = new Node({ id: 'node1' });
const port = new Port({ id: 'port1' });
node.addPort(port);

v2版本:

import { DefaultNodeModel, DefaultPortModel } from '@projectstorm/react-diagrams-defaults';

const node = new DefaultNodeModel({
  name: 'Node 1',
  color: 'rgb(0,192,255)',
});
const port = node.addOutPort('Out');

2. 画布渲染

v1版本:

<DiagramWidget diagram={diagram} />

v2版本:

import { CanvasWidget } from '@projectstorm/react-canvas-core';

<CanvasWidget engine={engine} />

3. 自定义节点实现

v2版本提供了更清晰的自定义节点实现方式。你需要创建模型、部件和工厂三部分:

模型定义 DiamondNodeModel.ts

export class DiamondNodeModel extends NodeModel {
  constructor() {
    super({ type: 'diamond' });
    this.addPort(new DiamondPortModel(PortModelAlignment.TOP));
    this.addPort(new DiamondPortModel(PortModelAlignment.LEFT));
    this.addPort(new DiamondPortModel(PortModelAlignment.BOTTOM));
    this.addPort(new DiamondPortModel(PortModelAlignment.RIGHT));
  }
}

部件实现 DiamondNodeWidget.tsx

export class DiamondNodeWidget extends React.Component {
  render() {
    return (
      <div className="diamond-node">
        <svg width={this.props.size} height={this.props.size}>
          {/* SVG内容 */}
        </svg>
        {/* 端口部件 */}
      </div>
    );
  }
}

工厂类 DiamondNodeFactory.tsx

export class DiamondNodeFactory extends AbstractReactFactory {
  constructor() {
    super('diamond');
  }
  
  generateReactWidget(event) {
    return <DiamondNodeWidget engine={this.engine} node={event.model} />;
  }
  
  generateModel(event) {
    return new DiamondNodeModel();
  }
}

迁移步骤

1. 安装新依赖

# 使用npm
npm install @projectstorm/react-diagrams @projectstorm/react-diagrams-defaults

# 使用pnpm
pnpm add @projectstorm/react-diagrams @projectstorm/react-diagrams-defaults

2. 更新导入语句

将原有的:

import { Diagram, Node } from 'storm-react-diagrams';

替换为:

import { DiagramEngine, DiagramModel } from '@projectstorm/react-diagrams-core';
import { DefaultNodeModel, DefaultLinkModel } from '@projectstorm/react-diagrams-defaults';
import { CanvasWidget } from '@projectstorm/react-canvas-core';

3. 重构图表初始化代码

v2初始化示例:

import { createEngine, DefaultNodeModel, DefaultLinkModel, DiagramModel } from '@projectstorm/react-diagrams';

// 创建引擎
const engine = createEngine();

// 创建节点
const node1 = new DefaultNodeModel({
  name: 'Node 1',
  color: 'rgb(0,192,255)',
});
node1.setPosition(100, 100);
const port1 = node1.addOutPort('Out');

// 创建第二个节点
const node2 = new DefaultNodeModel({
  name: 'Node 2',
  color: 'rgb(255,192,0)',
});
node2.setPosition(300, 100);
const port2 = node2.addInPort('In');

// 创建链接
const link = port1.link<DefaultLinkModel>(port2);
link.addLabel('Hello World!');

// 创建模型并添加元素
const model = new DiagramModel();
model.addAll(node1, node2, link);

// 将模型添加到引擎
engine.setModel(model);

4. 更新自定义组件

如果你有自定义节点或链接,需要按照v2的新架构重构。主要步骤包括:

  1. 创建模型类(继承NodeModel、LinkModel等)
  2. 创建对应的React部件
  3. 创建工厂类(继承AbstractReactFactory)
  4. 注册工厂到引擎

详细示例可参考自定义节点文档自定义端口文档

功能增强

多图层支持

v2引入了多图层功能,允许你创建多个节点层和链接层,实现更复杂的视觉效果和交互。例如,可以将背景元素放在底层,交互元素放在顶层。

// 创建图层
const layer1 = new LayerModel({ id: 'background' });
const layer2 = new LayerModel({ id: 'nodes' });
const layer3 = new LayerModel({ id: 'links' });

// 添加到模型
model.addLayer(layer1);
model.addLayer(layer2);
model.addLayer(layer3);

性能优化

v2在性能方面做了多项改进:

  1. 引入性能监控部件:提供PeformanceWidget,帮助你分析和优化图表性能
  2. 优化渲染逻辑:移除了v1中节点必须先于链接渲染的限制,提高渲染效率
  3. 改进状态管理:重构了状态机系统,减少不必要的重渲染

常见问题

1. 找不到模块错误

问题:迁移后出现类似Cannot find module '@projectstorm/react-diagrams'的错误。

解决:确保已安装所有必要的包,并使用正确的导入路径。v2使用作用域包名,如@projectstorm/react-diagrams

2. 链接不显示

问题:节点显示正常,但链接不显示或位置不正确。

解决:检查端口是否正确添加到节点,以及链接是否正确连接端口。v2中端口位置变化时会自动通知链接更新,但需要确保端口模型正确实现。

3. 样式丢失

问题:迁移后节点和链接样式丢失。

解决:v2使用Emotion代替Sass,需要更新样式定义方式。可以参考默认样式实现迁移自定义样式。

总结

react-diagrams v2通过重构包结构、优化依赖管理和改进API设计,提供了更强大、更灵活的图表功能。虽然迁移需要一定的工作量,但新架构带来的可维护性和扩展性提升是值得的。

主要迁移步骤:

  1. 更新依赖包
  2. 调整导入语句
  3. 重构图表初始化代码
  4. 更新自定义组件

如果你在迁移过程中遇到问题,可以查阅官方文档或参考示例项目。祝你的迁移工作顺利!

别忘了点赞收藏本文,关注获取更多react-diagrams使用技巧和最佳实践!

【免费下载链接】react-diagrams a super simple, no-nonsense diagramming library written in react that just works 【免费下载链接】react-diagrams 项目地址: https://gitcode.com/gh_mirrors/re/react-diagrams

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值