我的编程空间,编程开发者的网络收藏夹
学习永远不晚

react用g6的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

react用g6的方法

本篇文章和大家了解一下react用g6的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

react用g6使用方法:1、通过“npm install --save @antv/g6”命令在项目引入AntV G6;2、使用“yarn install”重新载入依赖;3、在需要使用到G6的js文件中引入G6即可。

react能用g6吗?

能用。

React中使用AntV G6

AntV G6:G6 是一个简单、易用、完备的图可视化引擎,它在高定制能力的基础上,提供了一系列设计优雅、便于使用的图可视化解决方案。能帮助开发者搭建属于自己的图可视化、图分析、或图编辑器应用。官网

AntV G6的引入

项目中使用npm对包引入

npm install --save @antv/g6

重新载入依赖

yarn install

在需要使用到G6的js文件中引入G6

import G6 from '@antv/g6';

自此,准备工作结束,下面开始使用G6绘制需要的关系图,以力导向图为例描述一对多、一对一的关系。

AntV G6的使用

创建容器:在 HTML 中创建一个用于容纳 G6 绘制的图的容器,通常为 div 标签。G6 在绘制时会在该容器下追加 canvas 标签,然后将图绘制在其中。

ref:在 React 中,可以通过ref.current获取到真实的 DOM 元素。Forwarding Refs(官方文档)

<div ref={ref} id="test"/>

创建关系图:创建关系图(实例化)时,至少需要为图设置容器、宽和高。其余请参考图例对应的API以及官方API文档,按需配置。

   graph = new G6.Graph({     container: ref.current,     width: width < 1000 ? 387 : width,     height: width < 1000 ? 220 : 550,     layout: {       type: 'force',       preventOverlap: true,       linkDistance: (d) => {         if (d.source.id === 'node0') {           return 10;         }         return 80;       },       nodeStrength: (d) => {         if (d.isLeaf) {           return 200;         }         return -500;       },       edgeStrength: (d) => {         if (d.source.edgeStrength) {           return 0.1;         }         return 0.8;       },     },     defaultNode: {       color: '#5B8FF9',     },     edgeStateStyles: {       highlight: {         stroke: '#5B8FF9' // 这个颜色可以根据个人喜好进行修改       }     },     modes: {       default: ['drag-canvas', 'zoom-canvas'],     },   });

数据处理及准备:根据所需图表的数据格式,对数据进行处理。

配置数据源并渲染:

graph.data(data); // 读取 Step 2 中的数据源到图上graph.render(); // 渲染图

AntV G6的基本使用阐述完后,需要注意在React中,G6与AntV L7及AntV G2,BizCharts有所不同,AntV G6在使用过程中需要访问节点,将其图形作为组件使用时,如果忽略这一点,则会出现问题。 React中使用G6(官网文档)

AntV G6在React中注意

  • 将渲染G6图形的Demo作为匿名函数返回,同时函数return的应为上文创建的容器,在其他js文件中调用Demo时作为组件,同时传入的参数为匿名函数的形参。

  • 上文中第二步:“创建关系图”中生成的实例应在副作用useEffect中定义。

  • 由于在CompotentDidMount中获取数据,当渲染Demo时可能会存在数据并未得到响应便渲染Demo导致报错,解决办法如下:

{deviceData.length ? <G6Picture g6Data={deviceData}/> : <></>}

实现效果

react用g6的方法

完整代码及部分解释如下:

Demo.js

import G6 from '@antv/g6';import React, {useEffect} from "react";import groupBy from 'lodash/groupBy'import router from "umi/router";function dealData(data) {//数据处理函数  const dataGroup = groupBy(data, (item) => [item.chipGroupName])  const nodes = [];  const edges = [];  let index = 0;  nodes.push({id: `node${index}`, size: 90, label: "芯片组管理", edgeStrength: true})  for (const key in dataGroup) {    index += 1;    nodes.push({id: `node${index}`, size: 60, label: key, edgeStrength: false, isLeaf: true})    edges.push({source: `node0`, target: `node${index}`, label: '芯片', routerFlag: 0})    if (dataGroup[key]) {      const indexTemp = index;      dataGroup[key].map((item) => {        index += 1;        nodes.push({id: `node${index}`, size: 40, label: item.name, edgeStrength: false})        edges.push({source: `node${indexTemp}`, target: `node${index}`, label: "产品", routerFlag: 1})      })    }  }  const returnData = {    nodes: [...nodes],    edges: [...edges],  }  return returnData;}export default function (props) {//props为传入的参数  const ref = React.useRef(null)  let graph = null;  useEffect(() => {    const {g6Data} = props;    const data = dealData(g6Data);    const width = document.getElementById('test').clientWidth;//获取当前宽度    if (!graph) {      graph = new G6.Graph({//生成关系图实例        container: ref.current,//获取真实的DOM节点        width: width < 1000 ? 387 : width,//根据所需大小定义高度、宽度        height: width < 1000 ? 220 : 550,        layout: {//根据要求所需及官方API文档配置          type: 'force',          preventOverlap: true,          linkDistance: (d) => {            if (d.source.id === 'node0') {              return 10;            }            return 80;          },          nodeStrength: (d) => {//根据要求所需及官方API文档配置            if (d.isLeaf) {              return 200;            }            return -500;          },          edgeStrength: (d) => {//根据要求所需及官方API文档配置            if (d.source.edgeStrength) {              return 0.1;            }            return 0.8;          },        },        defaultNode: {//根据要求所需及官方API文档配置          color: '#5B8FF9',        },        edgeStateStyles: {//根据要求所需及官方API文档配置          highlight: {            stroke: '#5B8FF9' // 这个颜色可以根据个人喜好进行修改          }        },        modes: {//根据要求所需及官方API文档配置          default: ['drag-canvas', 'zoom-canvas'],        },      });    }    const {nodes} = data;    graph.data({//绑定数据      nodes,      edges: data.edges.map((edge, i) => {        edge.id = `edge${i}`;        return Object.assign({}, edge);      }),    });    graph.render();//渲染图形//下面为交互事件配置及操作函数    graph.on('node:dragstart', (e) => {      graph.layout();      refreshDragedNodePosition(e);    });    graph.on('node:drag', (e) => {      refreshDragedNodePosition(e);    });    graph.on('node:dragend', (e) => {      e.item.get('model').fx = null;      e.item.get('model').fy = null;    });    graph.zoom(width < 1000 ? 0.7 : 1, {x: 300, y: 300});    graph.on('node:mouseenter', (ev) => {      const node = ev.item;      const edges = node.getEdges();      const model = node.getModel();      const size = model.size * 1.2;      graph.updateItem(node, {        size,      });      edges.forEach((edge) => {        graph.setItemState(edge, 'highlight', true)      });    });    graph.on('node:click', (e) => {      router.push({pathname: `/DeviceSetting/ChipsetManagement`})    });    graph.on('node:mouseleave', (ev) => {      const node = ev.item;      const edges = node.getEdges();      const model = node.getModel();      const size = model.size / 1.2;      graph.updateItem(node, {        size,      });      edges.forEach((edge) => graph.setItemState(edge, 'highlight', false));    });    function refreshDragedNodePosition(e) {      const model = e.item.get('model');      model.fx = e.x;      model.fy = e.y;    }  }, []);  return <>    <div ref={ref} id="test"/>  </>;};

具体使用Demo的js文件:

import G6Picture from './Demo'render(    return(        <>            {deviceData.length ? <G6Picture g6Data={deviceData}/> : <></>}        </>    ))

以上就是react用g6的方法的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注编程网行业资讯频道哦!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

react用g6的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

react用g6的方法

本篇文章和大家了解一下react用g6的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。react用g6使用方法:1、通过“npm install --save @antv/g6”命令在项目引入AntV G6;2、使用
2023-07-04

react能用g6吗

react能用g6,其使用方法:1、通过“npm install --save @antv/g6”命令在项目引入AntV G6;2、使用“yarn install”重新载入依赖;3、在需要使用到G6的js文件中引入G6即可。
2023-05-14

React中使用Mobx的方法

Mobx是一个前端“状态管理框架”,状态管理就是将分布在各个组件、各个模块中的状态的变化,按照一定的规则,进行统一的管理,这篇文章主要介绍了React中如何使用Mobx,需要的朋友可以参考下
2023-02-03

react的dispatch方法怎么用

react的dispatch方法的用法如“store.dispatch({ type: 'counter/incremented' })console.log(store.getState())”,表示调用“store.dispatch()”并传入一个action对象,然后通过“getState()”获取新state。
2023-05-14

react的dispatch方法如何使用

这篇文章主要介绍“react的dispatch方法如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react的dispatch方法如何使用”文章能帮助大家解决问题。react的dispatch
2023-07-04

react的diff方法怎么使用

今天小编给大家分享一下react的diff方法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react的diff方法
2023-07-04

react children方法怎么用

react children方法用于处理“this.props.children”,其处理方式有:1、React.Children.map();2、React.Children.forEach();3、React.Children.count();4、React.Children.only();5、React.Children.toArray()。
2023-05-14

react navigation方法怎么用

react navigation会在所有注册路由页面的props里面注入navigation,其使用方法:1、通过“const Main = createStackNavigator({...})”方式创建主路由;2、通过“createBottomTabNavigator”创建底部标签栏;3、通过“createSwitchNavigator”创建特殊switch路由等。
2023-05-14

React中10种Hook的使用方法

本篇文章给大家分享的是有关React中10种Hook的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。React Hook是什么?React官网是这么介绍的: Hook
2023-06-25

react children方法如何使用

这篇文章主要介绍“react children方法如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react children方法如何使用”文章能帮助大家解决问题。react children
2023-07-04

React Context详解使用方法

Context提供了一个无需为每层组件手动添加props,就能在组件树间进行数据传递的方法。在一个典型的 React 应用中,数据是通过props属性自上而下(由父及子)进行传递的,但这种做法对于某些类型的属性而言是极其繁琐的
2022-12-03

React浅析Fragments使用方法

这篇文章主要介绍了ReactFragments使用方法,关于reactFragments,React中一个常见模式是为一个组件返回多个元素。Fragments可以让你聚合一个子元素列表,并且不在DOM中增加额外节点
2022-12-03

react navigation方法如何使用

本篇内容介绍了“react navigation方法如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!react navigation会
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录