import React from 'react';
import {message} from 'antd'
import vis from 'vis';
import {api as http} from '../../fetch';
let relation = { nodes: [], edges: [] };   //设置关联图的数据(nodes为节点、edges为关联线)
const visDate={  //后端返回的数据格式
nodes:[
{
image:IconDomain,
label:'域名',
size:25,
id:1,
},
{
image:IconDomain,
label:'域名',
size:25,
id:2,
}
],edges:[
{
arrows:'to',
from:'1',
to:'2'
}
]
};
class Vis extends React.Component{
constructor(props) {
super(props);
this.state = {
relation: { nodes: [], edges: [] },
nodeheight:window.screen.height-326  //设置关联图高度为浏览器的高低减去顶部的高度
};
};
componentDidMount(){
this.props.onRef(this)    
let nodeheight=window.screen.height-326;
this.setnode()
}
setnode=(url,name)=>{    //请求后端接口
http.get(url,{params:{name:name}})
.then(response=>{
if(response.code===1){
response.data.nodes.map((val,index)=>{
val.image=IconDomain;
val.is_root?val.size=70:val.size=150;
})
visDate.nodes=response.data.nodes
visDate.edges=response.data.organ
let container = document.getElementById("graph");
relation = { nodes: new vis.DataSet(), edges: new vis.DataSet() };
let data = this.findNode(visDate);
let option = {
// autoResize: true,
width: '100%',
height: this.state.nodeheight+'px',
nodes: {
shape: 'box',
// shape: 'image',
level:11,
font: {
size: 18,
color: 'red',
// margin:100
},
borderWidth: 2,
// widthConstraint:{
// minimum:150,
// maximum:150
// },
widthConstraint:150, //设置节点的宽度,超出换行
fixed:false, //设置节点固定,如果为真,则节点不会沿X方向移动
mass:2,
chosen:false,
labelHighlightBold:false
// margin:10
// physics: true,
},
edges: {
smooth: {
enabled: false, //设置线是否可弯曲
type: 'dynamic'
},
color: "#fff",
arrows: {
to: {
scaleFactor: 0.6 //箭头大小
}
}
},
layout:{
randomSeed:1,//配置每次生成的节点位置都一样,参数为数字1、2等
// hierarchical: {
// direction: 'UD',//UD:上下 DU:下上 LR:左右 RL:右左
// sortMethod: 'directed'
// }, //层级结构显示}
},
physics: {
enabled: true, //节点不能重叠,整体图回弹效果
solver: 'forceAtlas2Based',
barnesHut: {
gravitationalConstant: -4000,
centralGravity: 0.3,
springLength: 120,
springConstant: 0.04,
damping: 0.09,
avoidOverlap: 0
}
},
interaction: {
hover: true,//鼠标移过后加粗该节点和连接线
// dragNodes:false,//是否能拖动节点
selectable:false,//是否可以点击选择
hover:false,
// chosen:false,
// labelHighlightBold:false
}
};
let network = new vis.Network(container, data, option);
}else{
message.error(response.msg)
}
}).catch(error=>{
console.log(error)
})
}
findNode = (data, name) => {    //根据名称调用后端接口根据自己的业务来
data.nodes.map((value, index) => {
relation.nodes.update({
chosen:false,
widthConstraint:value.size,
id: value.id,
// image: value.image,
label: value.label,
size: value.size,
// level:Number(index),
shape:value.is_root?'circle':'box'});   //区分根节点和普通节点,根节点为圆形,普通节点为长方形
return relation
});
relation.edges.update(data.edges);
return relation
};
render(){
return(
<div style={{display:'flex'}}>
<div id="graph" style={{justifyContent:'center',width:'100%'}}>
</div>
</div>
)
}
}
export default Vis;

在react中使用vis.js的更多相关文章

  1. 在react中使用intro.js的的一些经验

    react逐渐热了起来,但是新的东西毕竟前辈的经验少一些,前段时间自己在react中用到intro.js时,得到的资料甚少,摸索后便将一些心得记录下来了~ 1 intro.js的引入,这一点请看上一篇 ...

  2. React中jsx调用js例子

    需求: 界面新增一个“导入项目”按钮,点击该按钮可以执行项目导入功能.按钮点击事件部分是jsx语法代码,而项目导入部分是封装的js语法代码,假设此处用alert("123")代替. ...

  3. Three.js 快速上手以及在 React 中运用[转]

    https://juejin.im/post/5ca22692f265da30a53d6656 github 的地址 欢迎 star! 之前项目中用到了 3D 模型演示的问题,整理了一下之前学习总结以 ...

  4. 在 React Native 中使用 moment.js 無法載入語系檔案

    moment.js 是很常見的日期時間 library,友善的 API 與極佳的執行效率是它的兩大賣點.例如 (new Date()).getFullYear(),如果使用 moment.js 我可以 ...

  5. vis.js没有中文文档,个人在项目中总结的一些中文配置

    ##vis.js var options = { nodes:{//节点配置 borderWidth: 1,//节点边框的宽度,单位为px borderWidthSelected: 2,节点被选中时边 ...

  6. Vis.js图表插件

    Vis.js是一款基于JavaScript的可视化图表库,Vis.js不像其他的图表库那样仅仅支持几种常用的数据图表,比如线形图.柱状图.饼图等,Vis.js支持上百种不同类型的可视化图表类型,比如时 ...

  7. Immutable 详解及 React 中实践

    本文转自:https://github.com/camsong/blog/issues/3 Shared mutable state is the root of all evil(共享的可变状态是万 ...

  8. React中使用CSSTransitionGroup插件实现轮播图

    动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...

  9. 在React中使用Redux

    这是Webpack+React系列配置过程记录的第六篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...

随机推荐

  1. GLSL ES 3.0 和 2.0 的区别

    GLSL ES 3.0 和 2.0 的区别 语法区别 attribute和varying. 取而代之的是 in和out 头文件多了个#version 300 es 纹理 texture2D 和 tex ...

  2. spring-boot-starter-actouator2.1.4与c3p0版本0.9.1.2冲突

    报错前的pom文件: <?xml version="1.0" encoding="UTF-8"?><project xmlns="h ...

  3. 8080端口被System占用

    System是Windows页面内存管理进程,拥有0级优先权,没有它系统无法启动 就是说,System进程是无法关闭的,所以不要尝试去强行关闭,可能引起电脑异常查看是否是IIS占用的, 进入电脑控制面 ...

  4. [OC] NSTimer

    注意NSTimer的销毁 NSTimer在初始化之后,加入RunLoop会导致当前界面被强引用, 所以不会执行dealloc, 需要在合适在逻辑上进行NSTimer的销毁 [_timer invali ...

  5. 随机生成UserAgent包之fake-useragent

    一.安装 pip install fake-usragent 二.使用 .导包 from fake-useragent import UserAgent .实例化 ua = UserAgent() . ...

  6. bindservice与Activity通信

    package com.example.jikangwang.myapplication; import android.content.ComponentName; import android.c ...

  7. 【工作手札】Nginx接口代理可跨域

    接口代理nginx配置 location /api/ { proxy_set_header Host api.shenjian.io; proxy_set_header X-Forwarded-For ...

  8. 近期待学习&目标内容

    算法 Splay 树链剖分 AC自动机 问题 bzoj1010[HNOI2008]玩具装箱 bzoj1096[ZJOI2007]仓库建设 bzoj1597[USACP2008 Mar]土地购买 bzo ...

  9. 201771010126 王燕《面向对象程序设计(Java)》第十二周学习总结

    实验十二  图形程序设计 实验时间 2018-11-14 1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: 创建空框架 . 在Java中,常采用框架(Frame) ...

  10. ggplot2 aes函数map到data笔记

    .all_aesthetics <- c("adj", "alpha", "angle", "bg", " ...