HTML绘制拓扑简图,用最简单的方式画拓扑图!!!

本文介绍了一种放弃使用go.js和antv/g6等复杂库,转而利用DOM和SVG来简单实现拓扑图配置工具库的方法。作者通过分析库的维护成本高、灵活性差和定制化能力不足等问题,展示了如何基于DOM和SVG创建一个易于理解和维护的拓扑图组件。文章提供了一个简单的React组件示例,并解释了如何使用这个库来创建和布局节点、线条,以及自定义事件和样式。
摘要由CSDN通过智能技术生成

前言

前段时间重构了下面这样一个页面(产品页面不方便截图):

681121e6249670957dc82d4e50bd9025.png

类似于拓扑图的配置,原来是使用go.js实现的,类似的库还有antv g6。重构主要是为了提高代码质量,降低维护成本,产品上需要更强的定制化能力(对付产品经理的变态需求),所以经过一番研究之后,最后决定放弃使用现成的库。原因如下:

维护成本高:类似的库(antv/g6, go.js)都是基于canvas实现,也都大同小异的定义了一套组件,有一定的学习成本,同时基于这样的库写出来的代码都相对复杂;

灵活性差:因为是canvas实现,元素一般需要指定尺寸,所以在一些需要元素大小自适应的地方并没有DOM元素好实现;

定制化能力差。只能使用库里定义的api和事件,遇到一些比较极端的需求时无能为力。

当然,以上两个库还是相当强大的,不过基于这些原因,自己基于(DOM + SVG)撸一个拓扑图配置的工具库topology-byfe

demo演示

源代码

import React from 'react';

import { Topology, topologyWrapper, TemplateWrapper } from 'topology-byfe';

import { ITopologyNode, ITopologyData, IWrapperOptions } from 'topology-byfe/lib/declare';

import './index.less';

interface FlowState {

data: ITopologyData;

}

class Flow extends React.Component {

state: FlowState = {

data: { lines: [], nodes: [] },

};

generatorNodeData = (isBig: boolean) => ({

id: `${Date.now()}`,

name: isBig ? '宽节点'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值