react中使用cytoscape

news2025/1/17 2:58:35

1. 安装 cytoscape

npm install cytoscape

2. 使用

import React, { useEffect, useRef, useState } from "react";
import cytoscape from "cytoscape";

const peopleList = [
  {
    "data": {
      "id": "1",
      "label": "我"
    },
    "position": {
      "x": 100,
      "y": 100
    },
    "style": {
      "shape": "rectangle",
      "backgroundColor": "#dfacde",
      "color": "#ff0abc",
      "borderColor": "red",
      "borderWidth": 2,
      "fontSize": "25px"
    }
  },
  {
    "data": {
      "id": "2",
      "label": "父亲"
    },
    "position": {
      "x": 100,
      "y": 200
    },
    "style": {
      "shape": "rectangle"
    }
  },
  {
    "data": {
      "id": "3",
      "label": "母亲"
    },
    "position": {
      "x": 200,
      "y": 100
    },
    "style": {
      "shape": "ellipse",
      "borderColor": "#000",
      "borderWidth": 5
    }
  },
  {
    "data": {
      "id": "4",
      "label": "姐姐"
    },
    "position": {
      "x": 130,
      "y": 130
    },
    "style": {
      "shape": "ellipse",
      "color": "#ffa500",
      "backgroundImage": "url(http://localhost:8088/11.png)"
    }
  }
]
const relations = [
  {
    "data": {
      "id": "1-2",
      "source": "1",
      "target": "2",
      "label": "父子关系"
    },
    "style": {
      "width": 5,
      "color": null
    }
  },
  {
    "data": {
      "id": "1-3",
      "source": "1",
      "target": "3",
      "label": "母子关系",
      "lineType": "dashed"
    },
    "style": {
      "width": 2,
      "color": null,
      "lineStyle": "dashed"
    }
  },
  {
    "data": {
      "id": "1-4",
      "source": "1",
      "target": "4",
      "label": "姐弟关系",
      "lineType": "zigzag"
    },
    "style": {
      "width": 2,
      "color": null,
      "lineStyle": "zigzag"
    }
  },
  {
    "data": {
      "id": "2-3",
      "source": "2",
      "target": "3",
      "label": "夫妻关系",
      "lineType": "dotted"
    },
    "style": {
      "width": 2,
      "color": null,
      "lineStyle": "dotted",
      "lineColor": "#ffabbb"
    }
  },
  {
    "data": {
      "id": "2-4",
      "source": "2",
      "target": "4",
      "label": "父女关系",
      "lineType": "sinewave"
    },
    "style": {
      "width": 2,
      "color": "#fafbcd",
      "lineStyle": "sinewave"
    }
  },
  {
    "data": {
      "id": "3-4",
      "source": "3",
      "target": "4",
      "label": "母女关系",
      "lineType": "segment"
    },
    "style": {
      "width": 2,
      "color": "#ff0000",
      "lineStyle": "segment"
    }
  }
]

interface ElementItem {
  nodes: any[];
  edges: any[];
}

export default function Graph() {
  const cyRef = useRef<HTMLDivElement>(null);

  const [elements, setElements] = useState<ElementItem>();

  useEffect(() => {
    getGraphData();
  }, []);

  useEffect(() => {
    if (elements) {
      drawGraph();
    }
  }, [elements])

  async function getGraphData() {
    setElements({
      nodes: peopleList,
      edges: relations,
    });
  }

  function drawGraph() {
    if (cyRef.current) {
      const cy = cytoscape({
        container: cyRef.current,
        elements,
        style: [
          {
            selector: "node",
            style: {
              "background-fit": "cover cover",
              label: "data(label)",
              'text-halign': 'center',
              'text-valign': 'center',
              width: 'label' + 10,
              height: 'label' + 10,
              'font-size': '10px',
              "text-wrap": "wrap",
              "text-max-width": 100,
            },
          },
          {
            selector: "edge",
            style: {
              'line-color': '#333',
              'target-arrow-color': '#333',
              label: 'data(label)',
              "control-point-step-size": 20,
              'control-point-distances': [-3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3],
              'control-point-weights': [0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55,
                0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95],
              'curve-style': (edge: any) => {
                switch (edge.data('lineType')) {
                  case 'sinewave':
                    return 'unbundled-bezier';
                  case 'zigzag':
                    return 'segments'
                  default:
                    return 'bezier';
                }
              },
              'segment-distances': [-3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3],
              'segment-weights': [0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55,
                0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95],
              'font-size': '8px',
            },
          },

        ],
        layout: {
          name: "preset",
        },
      });

      cy.fit();
    }
  }

  return <div ref={cyRef} style={{ height: '100%', width: '100%' }} />
};

3. 运行效果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ShardingSphere——压测实战

摘要 Apache ShardingSphere 关注于全链路压测场景下&#xff0c;数据库层面的解决方案。 将压测数据自动路由至用户指定的数据库&#xff0c;是 Apache ShardingSphere 影子库模块的主要设计目标。 一、压测背景 在基于微服务的分布式应用架构下&#xff0c;业务需要多个服…

前端、后端面试集锦

诸位读者&#xff0c;我们在工作的过程中&#xff0c;经常会因跳槽而面试。 你开发能力很强&#xff0c;懂得技术也很多&#xff0c;但由于不知道如何组织面试的话术&#xff0c;从而让自己的面试不理想。 面试专栏-前端、后端面试 专栏已组织好面试的话术&#xff0c;为你的…

中国五百强企业用泛微为合同加速,提升数字化办公水平

华谊集团借力泛微&#xff0c;融合企业微信、SAP、WPS、电子签章等多种系统&#xff0c;构建了业务集成、场景驱动的全程数字化合同管理平台。 上海华谊&#xff08;集团&#xff09;公司是由上海市政府国有资产监督管理委员会授权&#xff0c;通过资产重组建立的大型化工企业…

docker搭建个人网盘和私有仓库Harbor

目录 1、使用mysql:5.7和 owncloud 镜像&#xff0c;构建一个个人网盘 2、安装搭建私有仓库 Harbor 1、使用mysql:5.7和owncloud&#xff0c;构建一个个人网盘 1.拉取mysql:5.6镜像&#xff0c;并且运行mysql容器 [rootnode8 ~]# docker pull mysql:5.7 [rootnode8 ~]# doc…

百亿级访问量,如何做缓存架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a;&#xff1a; 分布式缓存系统&#xff0c;如何架构&#xff1f;百亿级访…

2023年7月京东打印机行业品牌销售排行榜(京东运营数据分析)

鲸参谋监测的京东平台7月份打印机行业销售数据已出炉&#xff01; 7月份&#xff0c;打印机市场呈现下滑趋势。根据鲸参谋平台的数据可知&#xff0c;当月京东平台打印机的销量为48万&#xff0c;环比下降约28%&#xff0c;同比下降约18%&#xff1b;销售额为4亿&#xff0c;环…

超市商品管理

解决前后端跨域问题 分页 添加 权限 实现逻辑 权限-------中间表联系------->角色---------------中间表---------->用户

Android微信数据库解密2

Android微信数据库解密2 上篇文章讲了下微信数据库密码规则,以及相关的代码. 本篇文章主要讲解下使用xpose获取对应的数据库密码. public class HookModule implements IXposedHookLoadPackage {public static final String TAG "HookModule";Overridepublic voi…

并发编程的关键——LOCK

并发编程的关键——LOCK 锁的分类synchronized万物即可为锁synchronized的实现锁升级 LockAQSLockSupportCLHCAS Lock实现ReentrantLock阻塞方法acquireReadWriteLockReentrantReadWriteLockStampedLock 锁的分类 公平锁/非公平锁&#xff1a; – 公平的意思是多个线程按照申请…

uniapp项目实战系列(4):服务的异步请求,请求服务的二次封装

目录 系列往期文章&#xff08;点击跳转&#xff09;uniapp项目实战系列(1)&#xff1a;导入数据库&#xff0c;启动后端服务&#xff0c;开启代码托管&#xff08;点击跳转&#xff09;uniapp项目实战系列(2)&#xff1a;新建项目&#xff0c;项目搭建&#xff0c;微信开发工具…

Greenplum-segment镜像分布策略

Greenplum作为一款基于PostgreSQL的OLAP分布式MPP架构&#xff0c;其内部的角色可以通过配置冗余来保证高可用性&#xff0c;无论是管理节点还是计算节点。管理节点可以为Master配置一个Standby来保证高可用&#xff0c;而计算节点则可以为每个Primary segment配置一个对应的Mi…

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用&#xff1a; Linux命令的帮助信息查看 --help command --help 说明&#xff1a; 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls&#xff0c;pwd&#xff0c…

Java 多线程系列Ⅱ(线程安全)

线程安全 一、线程不安全线程不安全的原因&#xff1a; 二、线程不安全案例与解决方案1、修改共享资源synchronized 使用synchronized 特性 2、内存可见性Java内存模型&#xff08;JMM&#xff09;内存可见性问题 3、指令重排列4、synchronized 和 volatile5、拓展知识&#xf…

Python学习 -- 异常堆栈追踪技术

在编写Python代码时&#xff0c;出现异常是不可避免的。异常堆栈追踪是一种强大的工具&#xff0c;可以帮助我们定位错误发生的位置以及调用栈信息。Python的traceback模块提供了多种方法来获取和展示异常的堆栈信息。本文将详细介绍traceback模块中的print_exc()方法&#xff…

spring:事务失效+事务传播行为

一、事务失效 1.Transactional作用在非public上 Transactionalvoid transferAccounts(){adminDao.sub();System.out.println(10/0);adminDao.add();} 只执行sub&#xff08;&#xff09; 2.异常被try catch捕获 Transactionalpublic void transferAccounts(){adminDao.sub(…

vue3项目导入异常Error: @vitejs/PLUGIN-vue requires vue (>=3.2.13)

vue3项目导入异常 1、异常提示如下&#xff1a; failed TO LOAD config FROM D:\ws-projects\vite.co nfig.js error WHEN STARTING dev SERVER: Error: vitejs/PLUGIN-vue requires vue (>3.2.13) OR vue/compiler-sfc TO be pre sent IN the dependency tree.2、解决办法…

校园气象站的功能和作用

校园气象站是一种用于监测和记录气象数据的设备&#xff0c;下面将从功能和作用两个方面来详细介绍校园气象站。 一、校园气象站的功能 ①气象数据监测 校园气象站可以监测多种气象数据&#xff0c;包括温度、湿度、气压、风速、风向等。这些数据会通过4G方式上传至环境监控…

金蝶云星空二开,公有云执行SQL

功能背景&#xff1b; 金蝶公有云执行sql工具&#xff0c;因官方为云部署 用户无法连接数据库增删改查 天梯维护网页仅支持增删改操作 二开单据已支持根据sql动态生成单据体 与sql可视化界面操作一致 功能实现及场景&#xff1a; 1.可用于公有云执行sql类操作 2.私有云部署&am…

OB Cloud助力泡泡玛特打造新一代分布式抽盒机系统

作为中国潮玩行业的领先者&#xff0c;泡泡玛特凭借 MOLLY、DIMOO、SKULLPANDA 等爆款 IP&#xff0c;以及线上线下全渠道营销收获了千万年轻人的喜爱&#xff0c;会员数达到 2600 多万。2022 年&#xff0c;泡泡玛特实现 46.2 亿元营收&#xff0c;其中线上渠道营收占比 41.8%…

java 浅谈ThreadLocal底层源码(通俗易懂)

目录 一、ThreadLocal类基本介绍 1.概述 : 2.作用及特定 : 二、ThreadLocal类源码解读 1.代码准备 : 1.1 图示 1.2 数据对象 1.3 测试类 1.4 运行测试 2.源码分析 : 2.1 set方法解读 2.2 get方法解读 一、ThreadLocal类基本介绍 1.概述 : (1) ThreadLocal&#xff0c;本…