Skip to Content
📣 We just released Svelte Flow 1.0 Alpha — try it out and give us your feedback!
ExamplesNodesUpdating Nodes

Updating Nodes

You can update properties of nodes and edges freely.Don’t forget to self assign  $nodes = $nodes to trigger an update.

You have to create a new data object on a node to notify Svelte Flow about data changes.


<script lang="ts"> import { writable } from 'svelte/store'; import { SvelteFlow, Background, type Edge, type Node } from '@xyflow/svelte'; import '@xyflow/svelte/dist/style.css'; const initialNodes: Node[] = [ { id: '1', data: { label: '-' }, position: { x: 100, y: 100 } }, { id: '2', data: { label: 'Node 2' }, position: { x: 100, y: 200 } } ]; const initialEdges: Edge[] = [{ id: 'e1-2', source: '1', target: '2' }]; const nodes = writable<Node[]>(initialNodes); const edges = writable(initialEdges); let nodeName = 'Node 1'; let nodeBg = '#eee'; let nodeHidden = false; $: updateNode({ nodeName, nodeBg, nodeHidden }); function updateNode({ nodeName, nodeBg, nodeHidden }: { nodeName?: string; nodeBg?: string; nodeHidden?: boolean; }) { $nodes.forEach((node) => { if (node.id === '1') { if (nodeName) { // IMPORTANT: You need to mutate the data object // otherwise the node will not be updated node.data = { ...node.data, label: nodeName }; } if (nodeBg) { node.style = `background: ${nodeBg}`; } if (nodeHidden !== undefined) { node.hidden = nodeHidden; $edges.forEach((edge) => { if (edge.id === 'e1-2') { edge.hidden = nodeHidden; } }); } $nodes = $nodes; $edges = $edges; } }); } </script> <div style="height:100vh;"> <SvelteFlow {nodes} {edges} fitView> <div class="updatenode__controls"> <label>label:</label> <input value={nodeName} on:input={(evt) => (nodeName = evt.target?.value)} /> <label class="updatenode__bglabel">background:</label> <input value={nodeBg} on:input={(evt) => (nodeBg = evt.target?.value)} /> <div class="updatenode__checkboxwrapper"> <label>hidden:</label> <input type="checkbox" checked={nodeHidden} on:input={(evt) => (nodeHidden = evt.target?.checked)} /> </div> </div> <Background /> </SvelteFlow> </div> <style> :global(.updatenode__controls) { position: absolute; right: 10px; top: 10px; z-index: 4; font-size: 12px; } :global(.updatenode__controls label) { display: block; } :global(.updatenode__bglabel) { margin-top: 10px; } :global(.updatenode__checkboxwrapper) { margin-top: 10px; display: flex; align-items: center; } </style>
Last updated on