import React, { useEffect, useState } from 'react'; import ReactFlow, { Node, Edge, useNodesState, useEdgesState } from 'reactflow'; import styles from './updatenode.module.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 UpdateNode = () => { const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); const [nodeName, setNodeName] = useState('Node 1'); const [nodeBg, setNodeBg] = useState('#eee'); const [nodeHidden, setNodeHidden] = useState(false); useEffect(() => { setNodes((nds) => nds.map((n) => { if (n.id === '1') { // it's important that you create a new object here in order to notify react flow about the change n.data = { ...n.data, label: nodeName, }; } return n; }) ); }, [nodeName]); useEffect(() => { setNodes((nds) => nds.map((n) => { if (n.id === '1') { // it's important that you create a new object here in order to notify react flow about the change n.style = { ...n.style, backgroundColor: nodeBg }; } return n; }) ); }, [nodeBg]); useEffect(() => { setNodes((nds) => nds.map((n) => { if (n.id === '1' || n.id === 'e1-2') { // when you update a simple type you can just update the value n.hidden = nodeHidden; } return n; }) ); }, [nodeHidden]); return (
setNodeName(evt.target.value)} /> setNodeBg(evt.target.value)} />
setNodeHidden(evt.target.checked)} />
); }; export default UpdateNode;