Skip to Content
ExamplesEdges

Edge Label Renderer

If you want to escape SVG world within an edge, you can use the <EdgeLabelRenderer />. It’s a portal component that lets you render edge labels as divs on top of the edges. If you want to add mouse interactions you need to set pointer-events: all on the label.

import React, { useCallback } from 'react'; import { ReactFlow, Controls, Background, addEdge, useEdgesState, useNodesState, type EdgeTypes, type Edge, type OnConnect, type Node, } from '@xyflow/react'; import '@xyflow/react/dist/style.css'; import CustomEdge from './CustomEdge'; import CustomEdgeStartEnd from './CustomEdgeStartEnd'; const initialNodes: Node[] = [ { id: '1', type: 'input', data: { label: 'Node 1' }, position: { x: 0, y: 0 }, }, { id: '2', data: { label: 'Node 2' }, position: { x: 0, y: 300 } }, { id: '3', data: { label: 'Node 3' }, position: { x: 200, y: 0 } }, { id: '4', data: { label: 'Node 4' }, position: { x: 200, y: 300 } }, ]; const initialEdges: Edge[] = [ { id: 'e1-2', source: '1', target: '2', data: { label: 'edge label', }, type: 'custom', }, { id: 'e3-4', source: '3', target: '4', data: { startLabel: 'start edge label', endLabel: 'end edge label', }, type: 'start-end', }, ]; const edgeTypes: EdgeTypes = { custom: CustomEdge, 'start-end': CustomEdgeStartEnd, }; const EdgesFlow = () => { const [nodes, , onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); const onConnect: OnConnect = useCallback( (params) => setEdges((eds) => addEdge(params, eds)), [setEdges], ); return ( <ReactFlow nodes={nodes} edges={edges} onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} onConnect={onConnect} edgeTypes={edgeTypes} fitView style={{ backgroundColor: "#F7F9FB" }} > <Controls /> <Background /> </ReactFlow> ); }; export default EdgesFlow;
Last updated on