useEdgesData provides a computed reference to edge data that automatically updates when the edges change. It’s useful for accessing edge data outside of edge components or for watching multiple edges at once.
Usage
Single Edge
Multiple Edges
With TypeScript
< script setup >
import { useEdgesData } from '@vue-flow/core'
const edgeData = useEdgesData ( 'edge-1' )
// edgeData.value will be { id, type, data } or null
watch ( edgeData , ( data ) => {
if ( data ) {
console . log ( 'Edge data:' , data . data )
}
})
</ script >
Signature
// Single edge (returns single object or null)
function useEdgesData < EdgeType extends Edge = GraphEdge >(
edgeId : MaybeRefOrGetter < string >
) : ComputedRef < EdgeData < EdgeType > | null >
// Multiple edges (returns array)
function useEdgesData < EdgeType extends Edge = GraphEdge >(
edgeIds : MaybeRefOrGetter < string []>
) : ComputedRef < EdgeData < EdgeType >[]>
// With type guard
function useEdgesData < EdgeType extends Edge = GraphEdge >(
edgeIds : MaybeRefOrGetter < string []>,
guard : ( edge : Edge ) => edge is EdgeType
) : ComputedRef < EdgeData < EdgeType >[]>
Parameters
The ID of a single edge to get data from. Can be a string, ref, or getter function.
edgeIds
MaybeRefOrGetter<string[]>
An array of edge IDs to get data from. Can be an array, ref, or getter function.
guard
(edge: Edge) => edge is EdgeType
Optional type guard function to narrow down the edge type.
Return Value
For Single Edge
Returns ComputedRef<EdgeData | null> where EdgeData contains:
data
NonNullable<EdgeType['data']> | null
The edge’s data object (or null if the edge has no data)
Returns null if the edge is not found.
For Multiple Edges
Returns ComputedRef<EdgeData[]> - an array of edge data objects. Edges that are not found are excluded from the array.
Examples
Watching Edge Data Changes
< script setup >
import { useEdgesData } from '@vue-flow/core'
import { watch } from 'vue'
const edgeData = useEdgesData ( 'connection-1' )
watch ( edgeData , ( data ) => {
if ( data ?. data ) {
console . log ( 'Edge data updated:' , data . data )
// Perform side effects based on data changes
}
}, { deep: true })
</ script >
Monitoring Network Flow
< script setup lang = "ts" >
import { useEdgesData } from '@vue-flow/core'
import { computed } from 'vue'
interface FlowData {
bandwidth : number
currentFlow : number
status : 'active' | 'congested' | 'idle'
}
const connectionIds = [ 'conn-1' , 'conn-2' , 'conn-3' ]
const connections = useEdgesData < FlowData >( connectionIds )
const totalBandwidth = computed (() => {
return connections . value . reduce (( sum , edge ) => {
return sum + ( edge . data ?. bandwidth || 0 )
}, 0 )
})
const totalFlow = computed (() => {
return connections . value . reduce (( sum , edge ) => {
return sum + ( edge . data ?. currentFlow || 0 )
}, 0 )
})
const utilizationPercent = computed (() => {
if ( totalBandwidth . value === 0 ) return 0
return ( totalFlow . value / totalBandwidth . value ) * 100
})
const congestedConnections = computed (() =>
connections . value . filter ( c => c . data ?. status === 'congested' )
)
</ script >
< template >
< div class = "network-stats" >
< h3 > Network Status </ h3 >
< p > Total Bandwidth: {{ totalBandwidth }} Mbps </ p >
< p > Current Flow: {{ totalFlow }} Mbps </ p >
< p > Utilization: {{ utilizationPercent . toFixed ( 1 ) }}% </ p >
< p > Congested: {{ congestedConnections . length }} </ p >
</ div >
</ template >
Dynamic Edge Selection
< script setup >
import { useEdgesData , useVueFlow } from '@vue-flow/core'
import { computed } from 'vue'
const { edges } = useVueFlow ()
// Get data from all selected edges
const selectedEdgeIds = computed (() =>
edges . value
. filter ( edge => edge . selected )
. map ( edge => edge . id )
)
const selectedEdgesData = useEdgesData ( selectedEdgeIds )
watch ( selectedEdgesData , ( data ) => {
console . log ( 'Selected edges data:' , data )
})
</ script >
Edge Data with Node Context
< script setup >
import { useEdgesData , useNodesData , useVueFlow } from '@vue-flow/core'
import { computed } from 'vue'
const nodeId = ref ( 'node-1' )
const { edges } = useVueFlow ()
// Find all edges connected to a node
const connectedEdgeIds = computed (() =>
edges . value
. filter ( edge => edge . source === nodeId . value || edge . target === nodeId . value )
. map ( edge => edge . id )
)
const connectedEdgesData = useEdgesData ( connectedEdgeIds )
// Get the other nodes connected via these edges
const connectedNodeIds = computed (() => {
const ids = new Set ()
edges . value . forEach ( edge => {
if ( edge . source === nodeId . value ) ids . add ( edge . target )
if ( edge . target === nodeId . value ) ids . add ( edge . source )
})
return Array . from ( ids )
})
const connectedNodesData = useNodesData ( connectedNodeIds )
</ script >
< template >
< div >
< h3 > Connections for node {{ nodeId }} </ h3 >
< ul >
< li v-for = " edge in connectedEdgesData " : key = " edge . id " >
{{ edge . data ?. label || edge . id }}
</ li >
</ ul >
</ div >
</ template >
Handling Null Edge Data
< script setup >
import { useEdgesData } from '@vue-flow/core'
import { computed } from 'vue'
const edgeData = useEdgesData ( 'edge-1' )
// Edge data can be null, so always check
const hasLabel = computed (() => {
return edgeData . value ?. data ?. label !== undefined
})
const displayLabel = computed (() => {
return edgeData . value ?. data ?. label || 'No label'
})
</ script >
Filtering Edges by Data
< script setup lang = "ts" >
import { useEdgesData , useVueFlow } from '@vue-flow/core'
import { computed } from 'vue'
interface EdgeData {
priority : 'low' | 'medium' | 'high'
weight : number
}
const { edges } = useVueFlow ()
const allEdgeIds = computed (() => edges . value . map ( e => e . id ))
const allEdgesData = useEdgesData < EdgeData >( allEdgeIds )
const highPriorityEdges = computed (() =>
allEdgesData . value . filter ( e => e . data ?. priority === 'high' )
)
const heavyEdges = computed (() =>
allEdgesData . value . filter ( e => ( e . data ?. weight || 0 ) > 10 )
)
</ script >
< template >
< div class = "edge-filters" >
< h4 > High Priority: {{ highPriorityEdges . length }} </ h4 >
< h4 > Heavy Edges: {{ heavyEdges . length }} </ h4 >
</ div >
</ template >
Read-Only Computed Data
< script setup >
import { useEdgesData , useVueFlow } from '@vue-flow/core'
const edgeData = useEdgesData ( 'edge-1' )
// Note: The returned value is read-only
// This will log a warning and not work:
// edgeData.value = { ...newData } // ❌ Warning logged
// To update edge data, use useVueFlow instead:
const { updateEdgeData } = useVueFlow ()
updateEdgeData ( 'edge-1' , { label: 'Updated' }) // ✅ Correct way
</ script >
Notes
The returned computed ref is read-only . Attempting to set its value will log a warning.
To update edge data, use updateEdgeData or updateEdge from useVueFlow
Edge IDs can be reactive (refs or getter functions) - the composable will automatically track changes
When requesting multiple edges, only found edges are included in the result array
Edge data is optional and may be null, so always check before accessing properties
The data is deeply reactive and will update when any edge property changes
For single edge queries, returns null if the edge doesn’t exist
For multiple edge queries, returns an empty array if no edges are found