refactor: performance

This commit is contained in:
2026-03-12 21:01:43 +01:00
parent 92fdba7eef
commit 029bab8917
9 changed files with 109 additions and 47 deletions

View File

@@ -82,7 +82,7 @@ export function useAbstractNode<TData = Record<string, unknown>>(
): AbstractNodeContext<TData> {
const graphCtx = useContext(GraphContext)
const pathCtx = useContext(ConnectionPathContext)
const nodes = graphCtx?.nodes ?? []
const nodes = graphCtx?.graphRef?.current?.nodes ?? []
const edges = graphCtx?.edges ?? []
const setNodes = graphCtx?.setNodes
const setEdges = graphCtx?.setEdges

View File

@@ -25,14 +25,20 @@ export type FlowActions = {
}
// ---------------------------------------------------------------------------
// Graph context (nodes, edges, setters)
// Graph context (setters + graphRef for reads; edges in context so edge changes trigger re-renders)
// ---------------------------------------------------------------------------
export type GraphContextRef = {
current: { nodes: AppNode[]; edges: AppEdge[] }
}
export type GraphContextValue = {
nodes: AppNode[]
setNodes: (updater: AppNode[] | ((prev: AppNode[]) => AppNode[])) => void
edges: AppEdge[]
setEdges: (updater: AppEdge[] | ((prev: AppEdge[]) => AppEdge[])) => void
/** Current nodes/edges; updated every render. Read from here to avoid re-rendering on position-only changes. */
graphRef: GraphContextRef
/** Edges in context so consumers (e.g. edge indicators, useAbstractNode) re-render when edges change. */
edges: AppEdge[]
}
const GraphContext = React.createContext<GraphContextValue | null>(null)