跳到主要内容

与 TypeScript 一起使用

React Flow 是用 TypeScript 编写的,因此您不需要单独安装类型。在本节中,我们设置具有相应类型的基本流程。

用法

import { useState, useCallback } from 'react';
import ReactFlow, {
addEdge,
FitViewOptions,
applyNodeChanges,
applyEdgeChanges,
Node,
Edge,
OnNodesChange,
OnEdgesChange,
OnConnect,
DefaultEdgeOptions,
NodeTypes
} from 'reactflow';

import CustomNode from './CustomNode';

const initialNodes: Node[] = [
{ id: '1', data: { label: 'Node 1' }, position: { x: 5, y: 5 } },
{ id: '2', data: { label: 'Node 2' }, position: { x: 5, y: 100 } },
];

const initialEdges: Edge[] = [{ id: 'e1-2', source: '1', target: '2' }];

const fitViewOptions: FitViewOptions = {
padding: 0.2,
};

const defaultEdgeOptions: DefaultEdgeOptions = {
animated: true,
};

const nodeTypes: NodeTypes = {
custom: CustomNode,
};

function Flow() {
const [nodes, setNodes] = useState<Node[]>(initialNodes);
const [edges, setEdges] = useState<Edge[]>(initialEdges);

const onNodesChange: OnNodesChange = useCallback(
(changes) => setNodes((nds) => applyNodeChanges(changes, nds)),
[setNodes],
);
const onEdgesChange: OnEdgesChange = useCallback(
(changes) => setEdges((eds) => applyEdgeChanges(changes, eds)),
[setEdges],
);
const onConnect: OnConnect = useCallback(
(connection) => setEdges((eds) => addEdge(connection, eds)),
[setEdges],
);

return (
<ReactFlow
nodes={nodes}
edges={edges}
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
onConnect={onConnect}
fitView
fitViewOptions={fitViewOptions}
defaultEdgeOptions={defaultEdgeOptions}
nodeTypes={nodeTypes}
/>
);
}

自定义节点

当您使用自定义节点时,您可以通过传递参数来定义数据类型:

import { Node, NodeProps } from 'reactflow';

type NodeData = {
value: number;
};

type CustomNode = Node<NodeData>;

function MyCustomNode({ data }: NodeProps<NodeData>) {
return <div>A big number: {data.value}</div>;
}

您还可以将自定义节点数据类型传递给任何返回节点的函数或挂钩,例如 useReactFlow 挂钩:

const { getNodes, getEdges } = useReactFlow<NodeData, EdgeData>();