React Flow 邊的基礎知識與示例:從基本屬性到代碼實例詳解

本文為《React Agent:從零開始構建 AI 智能體》專欄系列文章。 專欄地址:https://blog.csdn.net/suiyingy/category_12933485.html。項目地址:https://gitee.com/fgai/react-agent(含完整代碼示?例與實戰源)。完整介紹:https://blog.csdn.net/suiyingy/article/details/146983582。

????????節點和邊是相互依存的關系。邊的存在依賴于節點,因為邊的起點(source)和終點(target)都是節點的 id。邊用于定義節點之間的連接關系,這種關系可以表示流程流向、數據傳遞方向、依賴關系等。節點通過邊與其他節點進行交互,形成一個有機的圖表結構。例如,在一個流程圖中,節點可能代表不同的任務步驟,邊則表示任務之間的執行順序。

????????邊與節點共同構成 React Flow 圖表的核心內容,由 React Flow 容器統一管理。容器負責處理邊的布局計算、渲染以及交互響應,確保邊能夠準確地連接節點,并在節點位置變動、圖表縮放等操作下,依然保持正確的連接關系和視覺效果。邊的存在使得原本獨立的節點形成一個有機整體,賦予圖表實際的業務意義和交互價值。

1 基本示例程序

????????下面是邊的基本示例程序。

import React, { useCallback } from 'react';
import {ReactFlow,useNodesState,useEdgesState,addEdge,
} from 'reactflow';import 'reactflow/dist/style.css';const initialNodes = [{ id: '1', position: { x: 0, y: 0 }, data: { label: '1' } },{ id: '2', position: { x: 0, y: 100 }, data: { label: '2' } },
];const initialEdges = [{ id: 'e1-2', source: '1', target: '2',type: 'default'}
];export default function App() {const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);const onConnect = useCallback((params) => setEdges((eds) => addEdge(params, eds)),[setEdges],);return (<div style={{ height: '500px' }}><ReactFlownodes={nodes}edges={edges}onNodesChange={onNodesChange}onEdgesChange={onEdgesChange}onConnect={onConnect}fitView/></div>);
}

????????運行程序后結果如下圖所示。

圖1 直線邊

2?基本屬性

2.1 id

????????id:邊的唯一標識符,用于在 React Flow 中識別和管理邊。在復雜圖表中,通過 id 可以方便地獲取、更新或刪除特定邊。

const edgeWithId = {id: 'unique-edge-id-1',source: 'node-a',target: 'node-b',type:'default'
};

2.2?source?和?target

????????source?和?target:分別指定邊的起點和終點節點的 id,是邊存在的基礎,決定邊連接的節點對象。source 是提供輸入的節點,target 則是接收輸出的節點。

const specificConnectionEdge = {id: 'edge-2',source: 'node-3',target: 'node-4',type: 'straight'
};

2.3?sourceHandle?和targetHandle

????????sourceHandle?和targetHandle:分別指定邊的起點和終點節點的連接端點?id。sourceHandle 是提供輸入的端點,targetHandle 則是接收輸出的端點。

import React, { useCallback } from 'react';
import {ReactFlow,useNodesState,useEdgesState,addEdge,Handle,
} from 'reactflow';
import 'reactflow/dist/style.css';const CustomNode = ({ data }) => {return (<div style={{padding: 20,border: '1px solid #ddd',borderRadius: 5,background: '#fff',}}><div>{data.label}</div>{/* 左側兩個輸入句柄 */}<Handletype="target"position="left"id="input-1"style={{ top: '30%' }}/><Handletype="target"position="left"id="input-2"style={{ top: '70%' }}/>{/* 右側兩個輸出句柄 */}<Handletype="source"position="right"id="output-1"style={{ top: '30%' }}/><Handletype="source"position="right"id="output-2"style={{ top: '70%' }}/></div>);
};const initialNodes = [{ id: '1', position: { x: 0, y: 0 }, data: { label: '1' },type: 'custom',},{ id: '2', position: { x: 200, y: 100 }, data: { label: '2' },type: 'custom',},
];const initialEdges = [{ id: 'e1-2a', source: '1', sourceHandle: 'output-1',target: '2', targetHandle: 'input-2',},{ id: 'e1-2b', source: '1', sourceHandle: 'output-2',target: '2', targetHandle: 'input-1',}
];const nodeTypes = {custom: CustomNode,
};export default function App() {const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);const onConnect = useCallback((params) => setEdges((eds) => addEdge({...params,type: 'default',}, eds)),[setEdges]);return (<div style={{ height: '500px' }}><ReactFlownodes={nodes}edges={edges}onNodesChange={onNodesChange}onEdgesChange={onEdgesChange}onConnect={onConnect}nodeTypes={nodeTypes}fitView/></div>);
}

????????運行程序后結果如下圖所示。

圖2 指定連接點

2.4?type

????????type:指定邊的類型,既可以是內置類型,也可以是自定義類型,影響邊的渲染方式和默認行為。邊的類型豐富多樣,默認包含?default、straight、step、smoothstep?等,每一種類型都賦予邊獨特的形狀與視覺呈現,滿足不同場景的設計需求。default?類型的邊通常會根據節點的相對位置,以自然流暢的曲線形態連接節點,這種曲線過渡柔和,能夠在復雜的節點布局中營造出一種和諧、美觀的視覺效果,讓整個流程圖看起來更具藝術感;straight?類型如其名,邊呈現為筆直的線條,簡潔明了地連接兩個節點,這種形狀在追求簡潔、直觀表達連接關系的場景下極為適用,能夠快速引導用戶理解節點之間的直接關聯;step?類型的邊則是通過直角轉折的方式連接節點,它會以階梯狀的折線形態出現,適合用于表示具有明確步驟、層級關系的連接,為流程圖增添清晰的邏輯層次感;smoothstep?類型的邊在?step?類型的基礎上進行了優化,它同樣有轉折,但轉折處采用了平滑的曲線過渡,在保留邏輯分層感的同時避免了過于生硬的直角,使邊的形態更加優雅流暢,在復雜且注重美觀與邏輯兼具的流程圖中發揮重要作用。

const initialEdges = [{ id: 'e1-2', source: '1', target: '2',type: 'smoothstep'}
];

????????運行程序后結果如下圖所示。

圖3 smoothstep 類型

2.5?style

????????style:用于設置邊的內聯樣式,包括線條顏色、寬度、線型(實線、虛線等)、箭頭樣式等。例如,將邊設置為紅色虛線:

const initialEdges = [{ id: 'e1-2', source: '1', target: '2',type: 'smoothstep',style: {stroke:'red',strokeWidth: 3,strokeDasharray: '5, 5',}}
]

????????運行程序后結果如下圖所示。

圖4? 邊樣式

2.6?animated

????????animated:設置為true時,邊可以啟用動畫效果,如淡入淡出、路徑變化動畫等,增強圖表的動態展示效果。

const initialEdges = [{ id: 'e1-2', source: '1', target: '2',type: 'smoothstep',animated: true,style: {stroke:'red',strokeWidth: 3,strokeDasharray: '5, 5',}}
];

2.7?selectable

????????selectable:控制邊是否可以被用戶選中。選中邊后,可以對其進行編輯、刪除等操作,或展示相關信息。

const initialEdges = [{ id: 'e1-2', source: '1', target: '2',type: 'smoothstep',animated: true,selectable: true,style: {stroke:'red',strokeWidth: 3,strokeDasharray: '5, 5',}}
];

2.8?事件屬性

????????onClick、onMouseEnter等事件屬性:與節點類似,邊也可以綁定各種事件處理函數,響應用戶操作。例如,當用戶點擊邊時,顯示邊的詳細信息:

const initialEdges = [{ id: 'e1-2', source: '1', target: '2',type: 'smoothstep',animated: true,selectable: true,style: {stroke:'red',strokeWidth: 3,strokeDasharray: '5, 5',},onClick: () => {alert('You clicked the edge!');}}
];

立即關注獲取最新動態

點擊訂閱《React Agent 開發專欄》,每周獲取智能體開發深度教程。項目代碼持續更新至React Agent 開源倉庫,歡迎 Star 獲取實時更新通知!FGAI 人工智能平臺:FGAI 人工智能平臺

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81659.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZooKeeper 原理解析及優劣比較

大家好&#xff0c;這里是架構資源棧&#xff01;點擊上方關注&#xff0c;添加“星標”&#xff0c;一起學習大廠前沿架構&#xff01; 引言 在分布式系統中&#xff0c;服務注冊、配置管理、分布式鎖、選舉等場景都需要一個高可用、一致性強的協調服務。Apache ZooKeeper 憑…

模糊照片變清晰:照片高清修復 ComfyUI 使用教學

模糊照片變清晰 滿心歡喜地翻出舊相冊&#xff0c;想重溫那些美好的回憶&#xff0c;結果照片卻模糊不清&#xff0c;根本看不清當年的模樣&#xff1b;又或者精心拍攝了一張超有氛圍感的照片&#xff0c;結果因為手抖或者光線問題&#xff0c;變得模糊&#xff0c;無法發朋友圈…

IEEEtran中文獻中的作者大于3個時,用et al.省略

latex&#xff1a; 在使用bib文件的時候&#xff0c;當參考文獻超過三個作者時&#xff0c;第三個作者后加逗號并接上et al.。我使用的是IEEEtran.bst。 \begingroup \small \bibliographystyle{IEEEtran} \bibliography{newbmyref1} \endgroup1.需要將IEEEtran.bst添加到這個…

Android Studio Kotlin 中的方法添加灰色參數提示

在使用 Android Studio 時&#xff0c; 我發現使用 Java 編寫方法后在調用方法時&#xff0c; 會自動顯示灰色的參數。 但在 Kotlin 中沒有顯示&#xff0c; 于是找了各種方法最后找到了設置&#xff0c; 并且以本文章記錄下來。 博主博客 https://blog.uso6.comhttps://blog.…

python寵物用品商城系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

《具身智能機器人:自修復材料與智能結構設計的前沿探索》

在具身智能機器人的研發進程中&#xff0c;自修復材料與智能結構設計無疑是極具挑戰性與創新性的關鍵領域&#xff0c;吸引著無數科研人員投身其中&#xff0c;探尋未知。 傳統機器人在復雜多變的環境中執行任務時&#xff0c;一旦材料出現損傷&#xff0c;如外殼刮擦、內部線…

矩陣的秩(Rank)

矩陣的秩&#xff08;Rank&#xff09;是線性代數中的核心概念&#xff0c;表示矩陣中線性無關的行&#xff08;或列&#xff09;的最大數量&#xff0c;反映了矩陣所包含的“獨立信息”的多少。以下是其核心要點&#xff1a; 1. 秩的定義 行秩&#xff1a;矩陣中線性無關的行…

麒麟系統編譯osg —— 擴展篇

一、背景 前文講到麒麟系統編譯osg&#xff0c;通常情況下會提示&#xff1a; 意思是無法生成插件osgdb_jpeg&#xff0c;需要配置“JPEG_LIBRARY”和“JPEG_INCLUDE_DIR”。 經查&#xff0c;本機不存在jpeglib.h和libjpeg.so&#xff0c;需要另外安裝。 二、編譯jpeg庫 …

【數據倉庫面試題合集①】數據建模高頻面試題及解析

?? 面試官愛問什么?——核心考察點 數據建模作為數倉崗位面試的重頭戲,考察的不只是模型知識,更是對業務理解、抽象能力和工程落地經驗的綜合評估。常見題型可分為三類: 概念類:模型類型、建模方法論(如維度建模、范式建模) 場景類:給定一個業務場景進行模型設計(如…

園區無人機智能巡檢項目方案

在工業4.0與智慧園區建設加速推進的今天&#xff0c;傳統人工巡檢的局限性日益凸顯&#xff1a;效率低、覆蓋范圍有限、安全隱患大。而無人機智能巡檢技術的崛起&#xff0c;正以其 "高空視角AI大腦全自動作業" 的創新模式&#xff0c;重新定義園區管理標準。本文將深…

【C++】vector:容器的別樣風采

目錄 vector&#xff1a; vector實例化&#xff1a; vector構造函數&#xff1a; vector對象尾插&#xff1a;v1.push_back() vector迭代器&#xff1a; vector實例化string類型的對象 vector接口: begin()end()//rbegin()rend() resize()&#xff1a; vector&#xff…

大語言模型 15 - Manus 超強智能體 開源版本 OpenManus 案例與原理深入解析

寫在前面 Manus 是由中國初創公司 Monica.im 于 2025 年 3 月推出的全球首款通用型 AI 智能體&#xff08;AI Agent&#xff09;&#xff0c;旨在實現“知行合一”&#xff0c;即不僅具備強大的語言理解和推理能力&#xff0c;還能自主執行復雜任務&#xff0c;直接交付完整成…

【node.js】安裝與配置

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;node.js 文章目錄 1. Node.js簡介1.1 Node.js的特點1.2 Node.js架構 2. Node.js安裝2.1 下載和安裝方法2.1.1 Windows安裝2.1.2 macOS安裝2.1.3 Linux安裝 2.2 使用NVM安裝和管理Node.js版本2.2.1 安裝NVM2.2.2 使用NVM管理Node…

Neo4j(一) - Neo4j安裝教程(Windows)

文章目錄 前言一、JDK與Neo4j版本對應關系二、JDK11安裝及配置1. JDK11下載2. 解壓3. 配置環境變量3.1 打開系統屬性設置3.2 新建系統環境變量3.3 編輯 PATH 環境變量3.4 驗證環境變量是否配置成功 三、Neo4j安裝&#xff08;Windows&#xff09;1. 下載并解壓Neo4j安裝包1.1 下…

深信服golang面經

for range 中賦值的變量&#xff0c;這個變量指向的是真實的地址嗎&#xff0c;還是臨時變量 不是真實地址&#xff0c;是臨時變量 package mainimport "fmt"func main() {slice : []int{4, 2, 3}for _, v : range slice {fmt.Println(v, &v) // 這里的 v 是臨…

PLC雙人舞:profinet轉ethernet ip網關奏響施耐德與AB的協奏曲

PLC雙人舞&#xff1a;ethernet ip轉profinet網關奏響施耐德與AB的協奏曲 案例分析&#xff1a;施耐德PLC與AB PLC的互聯互通 在現代工業自動化中&#xff0c;設備之間的互聯互通至關重要。本案例旨在展示如何通過北京倍訊科技的EtherNet/IP轉Modbus網關&#xff0c;將施耐德P…

鏈接家里電腦

要在外網訪問家里的電腦&#xff08;或NAS&#xff09;&#xff0c;主要有 5種主流方法&#xff0c;各有優缺點&#xff0c;適用于不同需求。以下是詳細方案和操作指南&#xff1a; 一、方案對比速查表 方法適用場景速度安全性難度是否需要公網IP遠程桌面&#xff08;RDP&…

VS Code開源AI編輯器:一場編程革命的新起點

在2025年5月19日&#xff0c;微軟發布了一則激動人心的消息——VS Code將開源其AI編輯器組件&#xff0c;特別是GitHub Copilot Chat擴展。正如微軟官方博客所宣告的&#xff1a;“我們相信代碼編輯器的未來應該是開放的&#xff0c;并由AI驅動。” 為什么現在開源&#xff1f…

51c嵌入式※~合集7~Linux

我自己的原文哦~ https://blog.51cto.com/whaosoft/13926843 一、u-boot和bootloader~區別 Bootloader 比Bootloader從字面上來看就是啟動加載的意思。用過電腦的都知道&#xff0c;windows開機時會首先加載bios&#xff0c;然后是系統內核&#xff0c;最后啟動完畢。那…

深度學習實戰 04:卷積神經網絡之 VGG16 復現三(訓練)

在后續的系列文章中&#xff0c;我們將逐步深入探討 VGG16 相關的核心內容&#xff0c;具體涵蓋以下幾個方面&#xff1a; 卷積原理篇&#xff1a;詳細剖析 VGG 的 “堆疊小卷積核” 設計理念&#xff0c;深入解讀為何 332 卷積操作等效于 55 卷積&#xff0c;以及 333 卷積操作…