中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react用g6的方法

發布時間:2022-12-20 17:34:07 來源:億速云 閱讀:250 作者:栢白 欄目:web開發

本篇文章和大家了解一下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的方法的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长汀县| 治多县| 清原| 云南省| 丽江市| 杭州市| 阿拉尔市| 盖州市| 娄底市| 湖北省| 巴中市| 当雄县| 同仁县| 天水市| 四平市| 白城市| 诏安县| 漳州市| 津南区| 精河县| 红原县| 沈阳市| 大同市| 罗江县| 衢州市| 雅安市| 临猗县| 新化县| 兴义市| 河曲县| 海盐县| 佛山市| 大荔县| 紫云| 任丘市| 黄石市| 喜德县| 博客| 巴楚县| 翼城县| 平乡县|