返回顶部
首页 > 资讯 > 精选 >react用g6的方法
  • 370
分享到

react用g6的方法

2023-07-04 20:07:14 370人浏览 八月长安
摘要

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

本篇文章和大家了解一下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的方法的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注编程网精选频道哦!

--结束END--

本文标题: react用g6的方法

本文链接: https://lsjlt.com/news/347272.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • react用g6的方法
    本篇文章和大家了解一下react用g6的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。react用g6使用方法:1、通过“npm install --save @antv/g6”命令在项目引入AntV G6;2、使用...
    99+
    2023-07-04
  • react能用g6吗
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react能用g6吗?能用。React中使用AntV G6AntV G6:G6 是一个简单、易用、完备的图可视化引擎,它在高定制能力的基础上,提供了一系列设计优雅...
    99+
    2023-05-14
    React
  • react的dispatch方法怎么用
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react的dispatch方法怎么用?React中DispatchRedux store 有一个方法叫 dispatch。更新 state 的唯一方法是调用 s...
    99+
    2023-05-14
    dispatch React
  • React中使用Mobx的方法
    目录一、Mobx前端状态管理框架 基础概念?1. 什么是Mobx2. 什么是状态管理?3. 为什么需要状态管理?状态管理的一般思想(Flux)二、mobx的用法1. 安装 mobx2...
    99+
    2023-02-03
    React使用Mobx React使用Mobx
  • react的dispatch方法如何使用
    这篇文章主要介绍“react的dispatch方法如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react的dispatch方法如何使用”文章能帮助大家解决问题。react的dispatch...
    99+
    2023-07-04
  • react的diff方法怎么使用
    今天小编给大家分享一下react的diff方法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react的diff方法...
    99+
    2023-07-04
  • react navigation方法怎么用
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react navigation方法怎么用?react-navigation 常用方法react-navigation是rn项目使用路由管理器;除了提供路...
    99+
    2023-05-14
    navigation React
  • react children方法怎么用
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react children方法怎么用?React.Children详解React.Children提供了处理this.props.children的工具...
    99+
    2023-05-14
    children React
  • React插槽使用方法
    目录需求 核心思想 React实现插槽的两种方式需求 我们自己写了个组件,引用组件时想要在组件中写入内容,并且写入的内容可以被组件识别、控制,用过Vue的同学肯定会立刻想到slot...
    99+
    2024-04-02
  • React Hook之使用State Hook的方法
    目录等价的class示例Hook和函数组件Hook是什么?声明State变量读取State更新State小结提示:方括号有什么用?提示:使用多个state变量总结Hook 简介章节中...
    99+
    2024-04-02
  • React代码的使用方法教程
    本篇内容介绍了“React代码的使用方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 仅对一个条...
    99+
    2024-04-02
  • React中10种Hook的使用方法
    本篇文章给大家分享的是有关React中10种Hook的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。React Hook是什么?React官网是这么介绍的: Hook ...
    99+
    2023-06-25
  • React中使用antd组件的方法
    目录antd使用antdantd antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。 国内镜像为:https://ant-d...
    99+
    2024-04-02
  • react中map方法如何用
    本篇内容主要讲解“react中map方法如何用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react中map方法如何用”吧! 在r...
    99+
    2024-04-02
  • react navigation方法如何使用
    本篇内容介绍了“react navigation方法如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!react navigation会...
    99+
    2023-07-04
  • react children方法如何使用
    这篇文章主要介绍“react children方法如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react children方法如何使用”文章能帮助大家解决问题。react children...
    99+
    2023-07-04
  • React浅析Fragments使用方法
    目录概述动机短语法带key 的Fragments概述 可以将子列表分组,而无需向DOM添加额外节点简单理解:空标签<React.Fragment></React.F...
    99+
    2022-12-03
    React Fragments的使用 React Fragments
  • React Context详解使用方法
    目录一、概述二、APIReact.createContextContext.ProviderClass.contextTypeContext.ConsumerContext.disp...
    99+
    2022-12-03
    React Context React Context用法
  • React中使用react-player播放视频或直播的方法
    业务中需要播放视频,寻来寻去,找到了react-player 初次点击,甚是眼熟,思来想去,竟是钉钉同款 如果使用react框架 先安装 npm install --save vid...
    99+
    2024-04-02
  • React forwardRef的使用方法及注意点
    之前使用react.forwardRef始终无法应用于react高阶组件中,最近终于捣鼓出来了,于是记录下来。关键点就是React.forwardRef的API中ref必须指向dom...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作