インタラクティビティの追加
ノードとエッジを選択、ドラッグ、削除できるようにしましょう。
この入門チュートリアルでは、「制御されたコンポーネント」を使用します。これは通常、React Flowを独自のアプリケーションで使用するための最良かつ最も柔軟な方法です。React Flowは非制御の方法でも使用できます。
変更イベントの処理
まず、いくつかのものをインポートしましょう。React Flowでの変更を管理するために、React FlowからuseState
と2つのヘルパー関数applyEdgeChanges
およびapplyNodeChanges
を使用します。
import { useState, useCallback } from 'react';
import { ReactFlow, applyEdgeChanges, applyNodeChanges } from '@xyflow/react';
ノードとエッジの両方に状態を設定します。
const [nodes, setNodes] = useState(initialNodes);
const [edges, setEdges] = useState(initialEdges);
その直下に、次の2つの関数を追加します。
const onNodesChange = useCallback(
(changes) => setNodes((nds) => applyNodeChanges(changes, nds)),
[],
);
const onEdgesChange = useCallback(
(changes) => setEdges((eds) => applyEdgeChanges(changes, eds)),
[],
);
ノードをドラッグまたは選択すると、onNodesChange
ハンドラーが呼び出されます。applyNodeChanges
関数の助けを借りて、これらの変更を現在のノード状態に適用できます。すべてをまとめると、次のようになります。
アプリケーションを実行すると、コンポーネントをクリックしてドラッグできるようになり、それらの動きに基づいてUIが更新されます。
接続の処理
最後にもう1つ欠けているものがあります。それは、ノードを手動で接続することです。このためには、onConnect
ハンドラーを実装し、それを<ReactFlow />
コンポーネントにも渡す必要があります。
ハンドルから別のハンドルにドラッグして、2つのノードを接続してみてください。これで完了です。完全にインタラクティブなフローを構築しました。
今のところはこれで終わりです :) よくできました!次に進む場合は、「カスタムノード」ガイドを確認することをお勧めします。