图布局:
graphin的图分析一般用graphin-force布局,但其配置项官网及ts均未给出,查询源码其配置项有:
getDefaultCfg() {
return {
/** 前置布局,默认为 concentric */
preset: {
/** 特殊情况处理:前置布局为force,但是前置的数据也为空,则证明是初始化force布局,否则为正常前置force布局 */
name: 'grid',
options: {},
},
/** spring stiffness 弹簧劲度系数 * */
stiffness: 200.0,
/** repulsion 斥力,这里指代 库伦常量Ke */
repulsion: 200.0 * 5,
/** 向心力 */
centripetalOptions: {
leaf: 1.6,
single: 1.6,
},
/** 速度的减震因子,其实就是阻尼系数 */
damping: 0.9,
/** 最小能量阈值,当粒子运动,有阻尼系数的存在,最终会将初始的能量消耗殆尽 */
minEnergyThreshold: 0.1,
/** 最大的速度 [0,1000] */
maxSpeed: 1000,
/** 最大迭代数 */
MaxIterations: 10000, // 240, // 1000000次/(1000/60) = 60000s = 1min
/** 是否开启动画 */
animation: true,
};
},
默认情况下,图布局的时间过长(5秒),需要调整其布局的参数:
const layout = {
animation: false,
type: 'graphin-force',
repulsion: 200.0 * 120, //斥力
enableWorker: true,
MaxIterations: 5000, //最大迭代次数
minDistanceThreshold: 4, //最小位移阈值
};
图缓存:
在图上每一个节点id确定了,节点也就唯一了
如只有当展开时右上角小圆点变色(相当于状态改变),
当重新设置数据时,如果也出现和其id相同的节点,那么会保留之前的状态。
解决方法:
1:每次数据更新时graph.clear();清除缓存
if (graphDataRef.current !== data) {
setGraphData(data);
setExpandNodes([]);
graphDataRef.current = data;
focusNodeRef.current = '';
levelRef.current = 1;
if (graphRef.current) {
const { graph } = graphRef.current;
graph.clear();
graph.zoomTo(1);
}
}
2:设置key值重新挂载组件:
<GraphinShow
key={graphinKey}
/>