翻譯|使用教程|編輯:楊鵬連|2021-06-17 11:11:29.140|閱讀 431 次
概述:本教程演示了如何使用 flexbox 布局來排列 React 圖表庫附帶的各種圖表控件。我們將安排的控件是 DiagramView 、NodeListView、Ruler、Overview、Zoomer和Ruler。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
MindFusion.Diagramming for WinForms是一個能幫助你創建工作流和進程圖表的.NET控件;數據庫實體關系圖表;組織圖表;對象層次和關系圖表;圖表和樹。它是基于對象-圖表框,表格和箭頭類型,將其歸類分派給其他并結合成復雜的結構。該控件提供超過預先定義的50多種圖表框,如自定義設計樣式和對圖表框著色等。MindFusion.Diagramming for WinForms現已加入在線訂購,Standard Single Developer版本原價2848現在搶購立享優惠只需2345,立即查看詳情>>
點擊下載MindFusion.Diagramming for WinForms最新試用版
本教程演示了如何使用 flexbox 布局來排列 React 圖表庫附帶的各種圖表控件。我們將安排的控件是 DiagramView 、NodeListView、Ruler、Overview、Zoomer和Ruler。這是最終應用程序的屏幕截圖:
我們使用可從//www.npmjs.com/package/diagram-library-react獲得的 React 框架和 MindFusion 圖庫構建我們的項目。
一、初始項目設置
我們打開一個終端并導航到我們要創建應用程序的文件夾。我們使用 create-react-app 來初始化一個空的 React 應用程序:
npx create-react-app flex-diagram正如您一樣,我們將應用程序命名為 flex-diagram。初始 React 設置完成后,我們安裝圖表:
npm install diagram-library-react一旦我們完成了,我們就可以開始編寫我們的應用程序了。我們添加一個新的 JavaScript 文件,我們將其命名為 DiagramApp.js。在其中我們首先導入默認的 React 命名空間并聲明 Component 類的成員導入。然后我們在名稱“mf”下聲明 MindFuson 圖表庫的默認導入。最后,我們聲明我們打算使用的控件類的成員導入:DiagramView、Overview、NodeListView、ZoomControl 和 Ruler:
import React, { Component } from 'react'; import mf from 'diagram-library'; import { DiagramView, Overview, NodeListView, ZoomControl, Ruler } from 'diagram-library-react';然后我們可以創建我們的類 DagramApp,它擴展了組件。我們需要一個構造函數,所以我們聲明一個。在其中我們創建了一個Diagram類的實例,它代表了圖表。請注意,這不是用于呈現圖表的 React 類的 DiagramView。這是交互式圖表,實際上是由DiagramView 渲染的。
class DiagramApp extends Component { constructor(props) { super(props); // create the diagram var diagram = new mf.Diagramming.Diagram(); ...........................然后我們創建一個ShapeNode實例數組,它將被NodeListView控件使用。同樣,NodeListView是一個呈現節點的 UI 組件,但它不會創建它們。它們作為參數提供給它。
var nodes = []; var shapes = ["Actor", "RoundRect", "Triangle", "Decision"]; for (var i = 0; i < shapes.length; ++i) { var node = new mf.Diagramming.ShapeNode(diagram); node.setText(shapes[i]); node.setShape(shapes[i]); nodes.push(node); }我們僅使用ShapeNode -s的 id-s 創建一個數組,我們也將其用作它們的標簽。您可以在//www.mindfusion.eu/onlinehelp/jsdiagram/index.htm?CC_refTable_of_Predefined_Shapes_4.htm檢查可用的預定義ShapeNode -s的 id-s 。
最后,我們需要在 React 狀態中存儲圖表,以及節點和形狀 id-s。當我們為我們的應用程序創建 HTML 時,我們將需要它們。在 React 中,訪問類變量的方式是將它們存儲在狀態中。
this.state = { diagram: diagram, nodes: nodes, captions: shapes };二、使用 CSS 和 Flexbox 布局排列 UI
我們的 flexbox 布局具有以下結構:
.container{ display: flex; flex: 1 1 100%; min-height: 500px; flex-flow: row nowrap; background-color: azure; }容器中的第一項是我們要將概覽和NodeListView控件放在一起的垂直列。此列需要保持固定大小。當用戶調整頁面大小時,我們不希望它調整大小。當可用空間發生變化時,必須調整中間的圖表。我們稱該列為“left-sidebar”并將其“flex-flow”設置為 column。如果可用空間太短,我們再次使用 no wrap 來停止將兩個控件并排放置的布局。我們還將此元素的寬度固定為 200 像素,這很適合我們的控件。
.left-sidebar{ flex: 0 0 200px; display: flex; flex-flow: column nowrap; background-color: beige; }我們希望概覽和NodeListView控件占用空間的方式有所不同。概覽需要固定的空間。我們希望為 NodeListView 提供額外的空間。這就是為什么我們再添加一種樣式來應用它:
.item { align-self: stretch; background-color:lightpink; flex: 1 1 300px; }我們將 1 作為 flex-grow 和 flex-shrink 的值,表示我們希望調整此元素的大小,而不是右列中的其他項目。
我們現在準備處理中間的圖表。在這里,重要的是要指出該元素將伸展以占據所有可用位置。而且,當空間變小時,必須收縮的就是這個項目:
.center-area { align-self: stretch; background-color:chartreuse; flex: 10 10 500px; max-height: 800px; overflow: hidden; }我們為 flex-grow 和 'flex-shrink' 屬性設置大值,并將 flex-basis 設置為 500 像素。我們必須將圖表的高度限制為 800 像素,因為它可能會變得很長。'align-self' 的重要屬性,它應用于由 flexbox 容器排列的項目,而不是容器本身。在這里,我們使用此屬性告訴圖表在空間可用時自行拉伸。隱藏溢出屬性以避免在大圖中呈現不必要的滾動條。
最后,右側邊欄將托管縮放控件。它類似于左側邊欄,但它沒有像 NodeListView 這樣的“特殊”項。Zoom 控件是一個固定大小的 UI 控件,不需要特殊處理。如果窗口太大,我們只需要確保沒有額外的空間被轉移到它上面:
.right-sidebar{ flex: 0 0 50px; background-color: lavender; }這是我們需要定義的最后一個元素的最后一個樣式。現在我們準備將這些樣式應用到真正的 React 組件并安排它們。
三、“渲染”方法
我們在新的 DiagramApp React 組件的 'render' 方法中聲明的第一件事是一些屬性:
var props = { "id": "diagram1", "linkHeadShapeSize": 2, "routeLinks": true, "roundedLinks": true, "backBrush": "#e0e9e9" };這些是Diagram實例的屬性,我們將通過 JavaScrpt 展開運算符提供它們。然后在 return 語句中我們首先聲明容器 div 元素。它的風格是“容器”。在其中我們聲明了左側邊欄,它將包含概覽和 NodeListView。我們也聲明它們:
return ( <div className="container"> <div className="left-sidebar"> <Overview diagram={this.state.diagram}></Overview> <NodeListView className="item" nodes={this.state.nodes} captions={this.state.captions} ></NodeListView> </div> </div> );該概述被綁定到圖中,我們堅持國家目標。該NodeListView需要與節點和標題列表,如果我們要加強對節點字幕。我們想要并且我們已經將節點和標題存儲在狀態中。
之后輪到圖表。它將占據中心區域,它的類是“中心區域”。除了圖表之外,我們還將使用標尺控件。我們首先放置它并將圖表嵌套在其中。我們使用擴展運算符將屬性分配給圖表,我們在方法開始時初始化了這些屬性。
<div className="center-area"> <Ruler style={{ width: "100%", height:"800px" }}> <DiagramView diagram={this.state.diagram} {...props} /> </Ruler> </div>最后,我們聲明右側邊欄,其中包含縮放控件。Zoom 控件還需要綁定到一個圖表實例,我們使用 state 來獲取對我們圖表的引用:
<div className="right-sidebar"> <ZoomControl diagram={this.state.diagram}></ZoomControl> </div>這樣我們的組件就準備好了。我們只需要將它放在 index.js 而不是默認的 App 組件中:
import DiagramApp from './DiagramApp'; ReactDOM.render( , document.getElementById('root') );我們可以用
npm start然后您可以在本地主機的端口 3000 上看到您的應用程序。
對于技術問題,請使用 JS Diagram 論壇:https : //mindfusion.eu/Forum/YaBB.pl?board=jsdiag_disc
關于 JavaScript 圖表:這個原生 JavaScript 庫使開發人員能夠創建和自定義任何類型的圖表、決策樹、流程圖、類層次結構、圖形、譜系樹、BPMN 圖等等。該控件提供豐富的事件集、眾多自定義選項、動畫、圖形操作、樣式和主題。您有 100 多個預定義節點、表節點和 15 多種自動布局算法。在//mindfusion.eu/javascript-diagram.html 上了解有關 JavaScript 圖表的更多信息。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: