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

react能用g6吗

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

react能用g6吗

react能用g6吗

本教程操作环境:Windows10系统、react18版、Dell G3电脑。

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}/> : <></>}

实现效果

0b561839a09ff27f6c018f014798983.jpg

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

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

react用g6的方法

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

react能使用require吗

react能使用require,其正确的使用方法是:1、通过“<img src={require('../img/icon1.png')} alt="" />”方式读取图片;2、使用“require('~/images/2.png').default”方式读取图片;3、将img字段拆分为文件名和图片名两个部分,然后使用“require('@/assets)”方式读取即可。
2023-05-14

能用react开发vr吗

可以用react开发vr,其实现方法:1、通过“npm install -g react-360-cli”安装React 360框架;2、使用“react-360 init new-react-360-app”初始化新项目;3、使用“npm start”命令启动项目;4、使用鼠标指针在此框架中进行360度导航即可。
2023-05-14

小程序能用react吗

小程序能用react,其使用方法:1、基于“react-reconciler”实现一个渲染器,生成一个DSL;2、创建一个小程序组件,去解析和渲染DSL;3、安装npm,并执行开发者工具中的构建npm;4、在自己的页面中引入包,再利用api即可完成开发。
2023-05-14

react能做移动端吗

react能做移动端,也适合移动端,但不适合pc端;因为pc端使用React需要重做很多已有组件,包括但不限于highCharts图表类、dataPicker基础组件,而移动web app恰恰是不需要这类复杂的组件的,这给写移动端项目重写组件带来了机会。
2023-05-14

react能不能使用require

本文小编为大家详细介绍“react能不能使用require”,内容详细,步骤清晰,细节处理妥当,希望这篇“react能不能使用require”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。react能使用requi
2023-07-04

能不能用react开发vr

这篇文章主要讲解了“能不能用react开发vr”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“能不能用react开发vr”吧!可以用react开发vr,其实现方法:1、通过“npm insta
2023-07-04

小程序能不能用react

本篇内容主要讲解“小程序能不能用react”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“小程序能不能用react”吧!小程序能用react,其使用方法:1、基于“react-reconciler
2023-07-04

阿里云服务器U1与G6性能对比及应用场景分析

本文将介绍阿里云服务器U1和G6的特点,以及它们在不同场景下的应用。通过比较U1和G6的性能指标和功能特点,帮助读者了解两者的差异,并为选择适合自身需求的服务器提供参考。阿里云服务器U1的特点与应用阿里云服务器U1是一种基于ARM架构的服务器产品,具备高性能和低成本的优势。它采用了A72处理器,具有出色的计算能力
阿里云服务器U1与G6性能对比及应用场景分析
2024-01-19

win7能用office365吗

本文小编为大家详细介绍“win7能用office365吗”,内容详细,步骤清晰,细节处理妥当,希望这篇“win7能用office365吗”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。office365win7能用
2023-06-30

使用React和ReduxToolkit实现用户登录功能

在React中,用户登录功能是一个常见的需求,为了实现该功能,需要对用户输入的用户名和密码进行验证,并将验证结果保存到应用程序状态中,在React中,可以使用ReduxToolkit来管理应用程序状态,从而实现用户登录功能,需要详细了解可以参考下文
2023-05-19

react项目中使用react-dnd实现列表的拖拽排序功能

这篇文章主要介绍了react项目中使用react-dnd实现列表的拖拽排序,本文结合实例代码讲解react-dnd是如何实现,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-06

云服务器能退款吗现在还能用吗安全吗

首先,云服务器具有一定的安全风险。由于云服务器使用的是公共网络,可能会遭到黑客攻击和恶意软件的入侵。黑客可以通过入侵云服务器来窃取数据或者控制服务器。因此,使用云服务器时需要采取安全措施,如密码保护、防火墙、数据加密等。其次,使用云服务器需要支付一定的费用。一些云服务器提供商提供免费的服务,如备份和恢复、灾难恢复等。但
云服务器能退款吗现在还能用吗安全吗
2023-10-28

基于React实现搜索GitHub用户功能

本文详细介绍了基于React实现搜索GitHub用户的功能。首先,使用React创建应用程序,然后安装axios用于HTTP请求。接着,创建搜索组件,包括输入字段和搜索按钮。随后,编写结果组件,用于显示搜索结果。最后,编写主应用程序并运行它。优化建议包括使用节流/防抖、缓存、分页、错误处理和加载状态指示。
基于React实现搜索GitHub用户功能
2024-04-02

React使用PropTypes实现类型检查功能

这篇文章主要介绍了React高级指引中使用PropTypes实现类型检查功能的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-10

编程热搜

目录