使用react-flow制作流程图
<strong>1.react-flow</strong><p> react-flow是一个用于构建基于节点的应用程序的库。这些可以是简单的静态图或复杂的基于节点的编辑器。同时react-flow支持自定义节点类型和边线类型,并且它附带一些组件,可以查看缩略图的Mini Map和悬浮控制器Controls.</p>
<h4>2、react-flow 的安装</h4>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;"> npm install react-flow-renderer # npm
yarn add react-flow-renderer # Yarn
</pre>
</div>
<h5>3.react-flow基本使用 </h5>
<p> 1、每个节点固定格式 里面添加内容</p>
<p><span style="font-size: 18px"> 代码</span></p>
<p> index.tsx</p>
<div class="cnblogs_code">
<pre>import React from 'react';
import ReactFlow, {
addEdge,
MiniMap,
Controls,
Background,
useNodesState,
useEdgesState,
} from 'react-flow-renderer';
import { nodes as initialNodes, edges as initialEdges } from './initial-elements';
const OverviewFlow = () => {
const = useNodesState(initialNodes);
const = useEdgesState(initialEdges);
const onConnect = (params) => setEdges((eds) => addEdge(params, eds));
return (
<ReactFlow
nodes={nodes} // 节点
edges={edges} // 连接线
onNodesChange={onNodesChange} // 节点拖拽等改变
onEdgesChange={onEdgesChange} // 连接线拖拽等改变
onConnect={onConnect} // 节点直接连接
fitView // 渲染节点数据
attributionPosition="top-right" // react-flow的位置,类似水印,可以通过css隐藏
>
// 背景图 可以配置颜色 方格宽度
<Background color="#aaa" gap={16} />
</ReactFlow>
);
};
export default OverviewFlow;</pre>
</div>
<p>initial-elements.ts节点与连接线数据</p>
<div class="cnblogs_code">
<pre>import { MarkerType } from 'react-flow-renderer'<span style="color: rgba(0, 0, 0, 1)">;
export const nodes </span>=<span style="color: rgba(0, 0, 0, 1)"> [
{
id: </span>'1', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> id必须</span>
type: 'input', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 类型: input开始default默认output结束 区别在于连接点不一样</span>
data: { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 额外的数据</span>
label: ( <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 节点名称</span>
<><span style="color: rgba(0, 0, 0, 1)">
Welcome to </span><strong>React Flow!</strong>
</>
<span style="color: rgba(0, 0, 0, 1)"> ),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> value: 5, .... // 可以将其他数据放入</span>
<span style="color: rgba(0, 0, 0, 1)"> },
position: { x: </span>250, y: 0 }, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 节点位置</span>
<span style="color: rgba(0, 0, 0, 1)">},
{
id: </span>'2'<span style="color: rgba(0, 0, 0, 1)">,
data: {
label: (
</span><><span style="color: rgba(0, 0, 0, 1)">
This is a </span><strong><span style="color: rgba(0, 0, 255, 1)">default</span> node</strong>
</>
<span style="color: rgba(0, 0, 0, 1)"> ),
},
position: { x: </span>100, y: 100<span style="color: rgba(0, 0, 0, 1)"> },
},
{
id: </span>'3'<span style="color: rgba(0, 0, 0, 1)">,
data: {
label: (
</span><><span style="color: rgba(0, 0, 0, 1)">
This one has a </span><strong>custom style</strong>
</>
<span style="color: rgba(0, 0, 0, 1)"> ),
},
position: { x: </span>400, y: 100<span style="color: rgba(0, 0, 0, 1)"> },
style: {
background: </span>'#D6D5E6'<span style="color: rgba(0, 0, 0, 1)">,
color: </span>'#333'<span style="color: rgba(0, 0, 0, 1)">,
border: </span>'1px solid #222138'<span style="color: rgba(0, 0, 0, 1)">,
width: </span>180<span style="color: rgba(0, 0, 0, 1)">,
},
},
{
id: </span>'4'<span style="color: rgba(0, 0, 0, 1)">,
position: { x: </span>250, y: 200<span style="color: rgba(0, 0, 0, 1)"> },
data: {
label: </span>'Another default node'<span style="color: rgba(0, 0, 0, 1)">,
},
},
{
id: </span>'5'<span style="color: rgba(0, 0, 0, 1)">,
data: {
label: </span>'Node id: 5'<span style="color: rgba(0, 0, 0, 1)">,
},
position: { x: </span>250, y: 325<span style="color: rgba(0, 0, 0, 1)"> },
},
{
id: </span>'6'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'output'<span style="color: rgba(0, 0, 0, 1)">,
data: {
label: (
</span><><span style="color: rgba(0, 0, 0, 1)">
An </span><strong>output node</strong>
</>
<span style="color: rgba(0, 0, 0, 1)"> ),
},
position: { x: </span>100, y: 480<span style="color: rgba(0, 0, 0, 1)"> },
},
{
id: </span>'7'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'output'<span style="color: rgba(0, 0, 0, 1)">,
data: { label: </span>'Another output node'<span style="color: rgba(0, 0, 0, 1)"> },
position: { x: </span>400, y: 450<span style="color: rgba(0, 0, 0, 1)"> },
},
];
export const edges </span>=<span style="color: rgba(0, 0, 0, 1)"> [
{ id: </span>'e1-2', source: '1', target: '2', label: 'this is an edge label'<span style="color: rgba(0, 0, 0, 1)"> },
{ id: </span>'e1-3', source: '1', target: '3'<span style="color: rgba(0, 0, 0, 1)"> },
{
id: </span>'e3-4', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> id必须</span>
source: '3', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线起始节点id</span>
target: '4', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线结束节点id</span>
animated: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线是否有动画</span>
label: 'animated edge', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线名称</span>
<span style="color: rgba(0, 0, 0, 1)">},
{
id: </span>'e4-5'<span style="color: rgba(0, 0, 0, 1)">,
source: </span>'4'<span style="color: rgba(0, 0, 0, 1)">,
target: </span>'5'<span style="color: rgba(0, 0, 0, 1)">,
label: </span>'edge with arrow head'<span style="color: rgba(0, 0, 0, 1)">,
markerEnd: { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线尾部的箭头</span>
<span style="color: rgba(0, 0, 0, 1)"> type: MarkerType.ArrowClosed,
},
},
{
id: </span>'e5-6'<span style="color: rgba(0, 0, 0, 1)">,
source: </span>'5'<span style="color: rgba(0, 0, 0, 1)">,
target: </span>'6'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'smoothstep', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线类型 default straight step smoothstep</span>
label: 'smooth step edge'<span style="color: rgba(0, 0, 0, 1)">,
},
{
id: </span>'e5-7'<span style="color: rgba(0, 0, 0, 1)">,
source: </span>'5'<span style="color: rgba(0, 0, 0, 1)">,
target: </span>'7'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'step'<span style="color: rgba(0, 0, 0, 1)">,
style: { stroke: </span>'#f6ab6c' }, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线颜色</span>
label: 'a step edge'<span style="color: rgba(0, 0, 0, 1)">,
animated: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
labelStyle: { fill: </span>'#f6ab6c', fontWeight: 700 }, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线名称样式</span>
<span style="color: rgba(0, 0, 0, 1)">},
];</span></pre>
</div>
<p> <span style="font-size: 18px"> 效果图</span><img src="https://img2023.cnblogs.com/blog/2749674/202305/2749674-20230525105241407-1750363191.png"></p>
<p> </p>
<p>2、自定义每个节点中的内容和样式 以及连接点</p>
<p> 这个是静态的 展示流程图 想拖动节点 加上1里面的 onNodesChange... 的参数即可</p>
<p>index.tsx</p>
<div class="cnblogs_code">
<pre>import React, {useEffect} from 'react'<span style="color: rgba(0, 0, 0, 1)">;
import ReactFlow, {
useNodesState,
useEdgesState,
} from </span>'react-flow-renderer'<span style="color: rgba(0, 0, 0, 1)">;
import {nodes as initialNodes, edges as initialEdges} from </span>'./initial-elements'<span style="color: rgba(0, 0, 0, 1)">;
import CustomNode from </span>'./ResizableNode'<span style="color: rgba(0, 0, 0, 1)">; <span style="color: rgba(255, 0, 0, 1)">//自定义的渲染每个节点的代码</span>
const nodeTypes </span>=<span style="color: rgba(0, 0, 0, 1)"> {
custom: CustomNode, <span style="color: rgba(255, 0, 0, 1)">//自定义的内容</span>
};
const OverviewFlow </span>= ({resizeFlag}: any) =><span style="color: rgba(0, 0, 0, 1)"> {
const </span>=<span style="color: rgba(0, 0, 0, 1)"> useNodesState(initialNodes);
const </span>=<span style="color: rgba(0, 0, 0, 1)"> useEdgesState(initialEdges);
useEffect(() </span>=><span style="color: rgba(0, 0, 0, 1)"> {
setNodes([]);
setTimeout(() </span>=><span style="color: rgba(0, 0, 0, 1)"> {
setNodes(initialNodes);
}, </span>50<span style="color: rgba(0, 0, 0, 1)">);
}, );
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!nodes?<span style="color: rgba(0, 0, 0, 1)">.length) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><<span style="color: rgba(0, 0, 0, 1)">ReactFlow
nodes</span>={nodes} <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 节点</span>
edges={edges} <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线</span>
panOnDrag={<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">}
zoomOnDoubleClick</span>={<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">}
zoomOnPinch</span>={<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">}
zoomOnScroll</span>={<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">}
panOnScroll</span>={<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">}
fitView </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 渲染节点数据</span>
nodeTypes=<span style="color: rgba(0, 0, 0, 1)">{nodeTypes}
attributionPosition</span>="top-left" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> react-flow的位置,类似水印,可以通过css隐藏 =》 </span><span style="color: rgba(51, 153, 102, 1)">.react-flow__attribution.left {display: none};</span></pre>
<pre> ><span style="color: rgba(0, 0, 0, 1)">
{</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> <Background color="#aaa" gap={16} /> </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
</span></ReactFlow>
<span style="color: rgba(0, 0, 0, 1)"> );
};
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> OverviewFlow;</pre>
</div>
<p> initial-elements.ts</p>
<div class="cnblogs_code">
<pre>import {MarkerType, Position} from 'react-flow-renderer'<span style="color: rgba(0, 0, 0, 1)">;
const styles </span>=<span style="color: rgba(0, 0, 0, 1)"> {
color: </span>'#333'<span style="color: rgba(0, 0, 0, 1)">,
border: </span>'1px solid #4E8FF0'<span style="color: rgba(0, 0, 0, 1)">,
borderRadius: </span>'5px'<span style="color: rgba(0, 0, 0, 1)">,
background: </span>'white'<span style="color: rgba(0, 0, 0, 1)">,
};<br>//因为数据太多删除了几个 不过格式都是这样写
export const nodes </span>=<span style="color: rgba(0, 0, 0, 1)"> [
{
id: </span>'0'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'custom',<span style="color: rgba(255, 0, 0, 1)">//有input,output,default三种,input只有一个输出,output只有一个输入,default输入输出各有一个 或者自定义的</span>
<span style="color: rgba(0, 0, 0, 1)"> data: {
label: </span>''<span style="color: rgba(0, 0, 0, 1)">,
},
position: {x: </span>-20, y: 40}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 节点位置</span>
<span style="color: rgba(0, 0, 0, 1)"> style: {
width: </span>1550<span style="color: rgba(0, 0, 0, 1)">,
height: </span>500<span style="color: rgba(0, 0, 0, 1)">,
border: </span>'1px solid #91caff'<span style="color: rgba(0, 0, 0, 1)">,
borderRadius: </span>'15px'<span style="color: rgba(0, 0, 0, 1)">,
color: </span>'#4585F2'<span style="color: rgba(0, 0, 0, 1)">,
background: </span>'#E2E6F3'<span style="color: rgba(0, 0, 0, 1)">,
zIndex: </span>-2<span style="color: rgba(0, 0, 0, 1)">,
},
},
{
id: </span>'1', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> id必须</span>
type: 'custom', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 类型: input开始default默认output结束 区别在于连接点不一样</span>
data: { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 额外的数据</span>
<span style="color: rgba(0, 0, 0, 1)"> label:
</span>'任务1'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> value: 1 // .... // 可以将其他数据放入</span>
<span style="color: rgba(0, 0, 0, 1)"> },
position: {x: </span>200, y: 70}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 节点位置</span>
<span style="color: rgba(0, 0, 0, 1)"> style: {
width: </span>200<span style="color: rgba(0, 0, 0, 1)">,
height: </span>150<span style="color: rgba(0, 0, 0, 1)">,
...styles,
},
},
{
id: </span>'2'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'custom'<span style="color: rgba(0, 0, 0, 1)">,
data: {
label: </span>'任务2'<span style="color: rgba(0, 0, 0, 1)">,
},
position: {x: </span>450, y: 70<span style="color: rgba(0, 0, 0, 1)">},
style: {
width: </span>200<span style="color: rgba(0, 0, 0, 1)">,
height: </span>150<span style="color: rgba(0, 0, 0, 1)">,
},
},
{
id: </span>'3'<span style="color: rgba(0, 0, 0, 1)">,
type: </span>'custom'<span style="color: rgba(0, 0, 0, 1)">,
data: {
label: (
</span>'任务3'<span style="color: rgba(0, 0, 0, 1)">
),
},
position: {x: </span>700, y: 70<span style="color: rgba(0, 0, 0, 1)">},
style: {
width: </span>200<span style="color: rgba(0, 0, 0, 1)">,
height: </span>150<span style="color: rgba(0, 0, 0, 1)">,
...styles,
},
}</span><span style="color: rgba(0, 0, 0, 1)">
];
export const edges </span>=<span style="color: rgba(0, 0, 0, 1)"> [
{
id: </span>'1-2'<span style="color: rgba(0, 0, 0, 1)">,
source: </span>'1'<span style="color: rgba(0, 0, 0, 1)">,
target: </span>'2'<span style="color: rgba(0, 0, 0, 1)">,
markerEnd: { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线尾部的箭头</span>
<span style="color: rgba(0, 0, 0, 1)"> type: MarkerType.ArrowClosed,
color: </span>'#4E8FF0'<span style="color: rgba(0, 0, 0, 1)">,
},
style: {stroke: </span>'#4E8FF0'}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线颜色</span>
labelStyle: {fill: '#4E8FF0', fontWeight: 700}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线名称样式</span>
<span style="color: rgba(0, 0, 0, 1)"> },
{
id: </span>'2-3', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> id必须</span>
source: '2', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线起始节点id</span>
target: '3', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线结束节点id</span>
markerEnd: { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线尾部的箭头</span>
<span style="color: rgba(0, 0, 0, 1)"> type: MarkerType.ArrowClosed,
color: </span>'#4E8FF0'<span style="color: rgba(0, 0, 0, 1)">,
},
style: {stroke: </span>'#4E8FF0'}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线颜色</span>
labelStyle: {fill: '#4E8FF0', fontWeight: 700}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线名称样式</span>
<span style="color: rgba(0, 0, 0, 1)"> },
{
id: </span>'3-4'<span style="color: rgba(0, 0, 0, 1)">,
source: </span>'3'<span style="color: rgba(0, 0, 0, 1)">,
target: </span>'4'<span style="color: rgba(0, 0, 0, 1)">,
style: {stroke: </span>'#4E8FF0'}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线颜色</span>
labelStyle: {fill: '#4E8FF0', fontWeight: 700}, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线名称样式</span>
markerEnd: { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连接线尾部的箭头</span>
<span style="color: rgba(0, 0, 0, 1)"> type: MarkerType.ArrowClosed,
color: </span>'#4E8FF0'<span style="color: rgba(0, 0, 0, 1)">,
},
}</span><span style="color: rgba(0, 0, 0, 1)">
];</span></pre>
</div>
<p> </p>
<pre>ResizableNode.tsx</pre>
<div class="cnblogs_code">
<pre>import React, {memo} from 'react'<span style="color: rgba(0, 0, 0, 1)">;
import {Handle, Position} from </span>'react-flow-renderer'<span style="color: rgba(0, 0, 0, 1)">;
import className from </span>'./home.module.scss'<span style="color: rgba(0, 0, 0, 1)">;
import newTask from </span>'@/static/newTask.png'<span style="color: rgba(0, 0, 0, 1)">;
import Operator from </span>'@/static/OperatorConfig.png'<span style="color: rgba(0, 0, 0, 1)">;
import DeployTask from </span>'@/static/DeploymentTask.png'<span style="color: rgba(0, 0, 0, 1)">;
import TaskReview from </span>'@/static/TaskReview.png'<span style="color: rgba(0, 0, 0, 1)">;
import TaskLaunch from </span>'@/static/TaskLaunch.png'<span style="color: rgba(0, 0, 0, 1)">;
import {Button} from </span>'antd'<span style="color: rgba(0, 0, 0, 1)">;
const datadevelopment </span>=<span style="color: rgba(0, 0, 0, 1)"> [
{
id: </span>'0'<span style="color: rgba(0, 0, 0, 1)">,
},
{
src: newTask,
id: </span>'1'<span style="color: rgba(0, 0, 0, 1)">,
button: </span>'快速开始'<span style="color: rgba(0, 0, 0, 1)">,
url: </span>''<span style="color: rgba(0, 0, 0, 1)">,
width: </span>'50px'<span style="color: rgba(0, 0, 0, 1)">,
height: </span>'50px'<span style="color: rgba(0, 0, 0, 1)">,
},
{
src: Operator,
id: </span>'11'<span style="color: rgba(0, 0, 0, 1)">,
button: </span>'配置说明'<span style="color: rgba(0, 0, 0, 1)">,
link: </span>''<span style="color: rgba(0, 0, 0, 1)">,
width: </span>'45px'<span style="color: rgba(0, 0, 0, 1)">,
height: </span>'45px'<span style="color: rgba(0, 0, 0, 1)">,
},
{
src: DeployTask,
id: </span>'3'<span style="color: rgba(0, 0, 0, 1)">,
title: </span>'任务基本信息'<span style="color: rgba(0, 0, 0, 1)">,
width: </span>'55px'<span style="color: rgba(0, 0, 0, 1)">,
height: </span>'55px'<span style="color: rgba(0, 0, 0, 1)">,
},
];
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> memo(({data, id, isConnectable}: any) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log(1, data);</span>
const position = (sum: any) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (sum) {
</span><span style="color: rgba(0, 0, 255, 1)">case</span> '6'<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Position.Right;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> '9'<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Position.Top;
</span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Position.Left;
}
};
const pageButton </span>= (item: any) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (item.link) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><<span style="color: rgba(0, 0, 0, 1)">Button
target</span>='_blank'<span style="color: rgba(0, 0, 0, 1)">
type</span>='link'<span style="color: rgba(0, 0, 0, 1)">
htmlType</span>='button'<span style="color: rgba(0, 0, 0, 1)">
href</span>=<span style="color: rgba(0, 0, 0, 1)">{item.link}
</span>><span style="color: rgba(0, 0, 0, 1)"> {item.button}
</span></Button>
<span style="color: rgba(0, 0, 0, 1)"> );
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><<span style="color: rgba(0, 0, 0, 1)">Button
style</span>=<span style="color: rgba(0, 0, 0, 1)">{{
background: </span>'linear-gradient(90deg,#2468E8,#2C61E4,#4148D0,#5127B8)'<span style="color: rgba(0, 0, 0, 1)">,
border: </span>'none'<span style="color: rgba(0, 0, 0, 1)">,
}}
onClick</span>={e =><span style="color: rgba(0, 0, 0, 1)"> {
e.stopPropagation();
window.location.hash </span>=<span style="color: rgba(0, 0, 0, 1)"> item.url;
}}
type</span>='primary'
><span style="color: rgba(0, 0, 0, 1)"> {item.button}
</span></Button>
<span style="color: rgba(0, 0, 0, 1)"> );
}
};
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><div className={className.ResicabelNode}>
<<span style="color: rgba(0, 0, 0, 1)">Handle
style</span>={{visibility: 'hidden'<span style="color: rgba(0, 0, 0, 1)">}}
type</span>="target"<span style="color: rgba(0, 0, 0, 1)">
position</span>=<span style="color: rgba(0, 0, 0, 1)">{position(id)}
isConnectable</span>=<span style="color: rgba(0, 0, 0, 1)">{isConnectable}
</span>/>
<span style="color: rgba(0, 0, 0, 1)"> {
datadevelopment.filter((item: any) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> item.id ===<span style="color: rgba(0, 0, 0, 1)"> id;
}).map((item: any) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span>+item.id < 12
? <<span style="color: rgba(0, 0, 0, 1)">div
key</span>=<span style="color: rgba(0, 0, 0, 1)">{item.id}
className</span>=<span style="color: rgba(0, 0, 0, 1)">{className.nodeContent}
style</span>=<span style="color: rgba(0, 0, 0, 1)">{data.style}
</span>><span style="color: rgba(0, 0, 0, 1)">
{item.src </span>? <img style={{width: item.width, height: item.height}} src={item.src} /> : null}
<div className={className.nodeRightbox}>
<p className={className.nodelabel}>{data.label}</p>
<span style="color: rgba(0, 0, 0, 1)"> {item.button
</span>?<span style="color: rgba(0, 0, 0, 1)"> pageButton(item)
: </span><span className={className.nodelabelTitle}>{item.title}</span>}
</div>
</div>
: <<span style="color: rgba(0, 0, 0, 1)">div
key</span>=<span style="color: rgba(0, 0, 0, 1)">{item.id}
className</span>=<span style="color: rgba(0, 0, 0, 1)">{className.dataDistribution}
style</span>=<span style="color: rgba(0, 0, 0, 1)">{data.style}
</span>><span style="color: rgba(0, 0, 0, 1)">
{
item.order
</span>? <p className={className.circle}><span style="color: rgba(0, 0, 0, 1)">
{item.order}
</span></p> : null
<span style="color: rgba(0, 0, 0, 1)"> }
</span><p className={className.nodelabel}>{data.label}</p>
<span style="color: rgba(0, 0, 0, 1)"> {
item.button </span>? pageButton(item) : <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">
}
</span></div>
<span style="color: rgba(0, 0, 0, 1)"> );
})
}
</span><<span style="color: rgba(0, 0, 0, 1)">Handle
style</span>={{visibility: 'hidden'<span style="color: rgba(0, 0, 0, 1)">}}
type</span>='source'<span style="color: rgba(0, 0, 0, 1)">
position</span>={id === '11'
|| id === '5' ?<span style="color: rgba(0, 0, 0, 1)"> Position.Bottom : Position.Right}
id</span>='a'<span style="color: rgba(0, 0, 0, 1)">
className</span>='my_handle'<span style="color: rgba(0, 0, 0, 1)">
isConnectable</span>=<span style="color: rgba(0, 0, 0, 1)">{isConnectable}
</span>/>
</div>
<span style="color: rgba(0, 0, 0, 1)"> );
});</span></pre>
</div>
<p> </p>
<p> 效果图</p>
<p><img src="https://img2023.cnblogs.com/blog/2749674/202305/2749674-20230525110902651-227436945.png"></p>
<p> </p>
<p> 收集的一些关于 react-flow 参数讲解链接以及官网地址</p>
<p> https://www.5axxw.com/wiki/content/obkffc</p>
<p> https://reactflow.dev/</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/qing1224/p/17430652.html
頁:
[1]