1. 自定义节点命名和渲染数据名冲突
由于在G6开发过程中自带的节点无法满足需求,于是需要自我重新定义一个registerNode-自定义节点的类型.
同时在创建treeGraph实例的时候,需要用到我们自己所编写的自定义的节点样式 treeNode
如果我们在进行数据的渲染和载入的时候(如下)
//(3)为treeGraph进行data的载入渲染
treeGraph.data(treeGraphPreData)
treeGraph.render()
一旦我们的treeGraphPreData中包含的Object的元素中包含
!!!!type=“XXXX”!!!这样一个键值,就会和我们的defaultNode: { type: 'treeNode'}
发生冲突!!!!!
就会造成这样空白节点也就是我们想要的treeNode节点样式并未生效!!!
解决方案:
- 采用G6自带的Util类对数据进行DFS数据预处理的时候将
type="XXX"
的关键字名字换成deviceType="XXX"
以此来避免自定义节点中渲染名type=“treeNode”
的冲突
G6.Util.traverseTree(treeGraphPreData, (subTree) => {})
G6.Util.traverseTree(treeGraphPreData, (subTree) => {
subTree.deviceType = subTree.type
delete subTree.type
})
2. treeGraph子树渲染id相同冲突
如果我们涉及的treeGraph数据载入中存在两个子树的id相同(可能模拟数据的时候id是一些比如设备特有属性,但存在相同的可能),就会造成treeGraph在第二次渲染到相同id的节点时候卡住,无法渲染。
解决方案:
// 给对应子树节点id加上一个时间戳,形成独有id
G6.Util.traverseTree(treeGraphPreData, (subTree) => {
const timestamp = (new Date()).getTime()
subTree.id = subTree.id + timestamp
})