UNPKG

@antv/g6

Version:

graph visualization frame work

1 lines 26.2 kB
{"expireTime":9007200828528711000,"key":"transformer-remark-markdown-ast-9189a97da3cfb91bb1d737121c5eb09f-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":{"type":"root","children":[{"type":"heading","depth":3,"children":[{"type":"link","url":"#概述","title":null,"children":[],"data":{"hProperties":{"aria-label":"概述 permalink","class":"anchor"},"hChildren":[{"type":"raw","value":"<svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg>"}]}},{"type":"text","value":"概述","position":{"start":{"line":2,"column":5,"offset":5},"end":{"line":2,"column":7,"offset":7},"indent":[]}}],"position":{"start":{"line":2,"column":1,"offset":1},"end":{"line":2,"column":7,"offset":7},"indent":[]},"data":{"id":"概述","htmlAttributes":{"id":"概述"},"hProperties":{"id":"概述"}}},{"type":"paragraph","children":[{"type":"text","value":"G6是一个纯JS库,不与任何框架耦合,也就是可以在任何前端框架中使用,如 React、Vue、Angular 等。由于我们内部绝大多数都是基于 React 技术栈的,所以我们也仅提供一个 G6 在 React 中使用的 Demo。","position":{"start":{"line":3,"column":1,"offset":8},"end":{"line":3,"column":116,"offset":123},"indent":[]}}],"position":{"start":{"line":3,"column":1,"offset":8},"end":{"line":3,"column":116,"offset":123},"indent":[]}},{"type":"paragraph","children":[{"type":"text","value":"在 React 中使用 G6,和在 HTML 中使用基本相同,唯一比较关键的区分就是在实例化 Graph 时,要","position":{"start":{"line":5,"column":1,"offset":125},"end":{"line":5,"column":57,"offset":181},"indent":[]}},{"type":"strong","children":[{"type":"text","value":"保证 DOM 容器渲染完成,并能获取到 DOM 元素","position":{"start":{"line":5,"column":59,"offset":183},"end":{"line":5,"column":85,"offset":209},"indent":[]}}],"position":{"start":{"line":5,"column":57,"offset":181},"end":{"line":5,"column":87,"offset":211},"indent":[]}},{"type":"text","value":"。","position":{"start":{"line":5,"column":87,"offset":211},"end":{"line":5,"column":88,"offset":212},"indent":[]}}],"position":{"start":{"line":5,"column":1,"offset":125},"end":{"line":5,"column":88,"offset":212},"indent":[]}},{"type":"paragraph","children":[{"type":"text","value":"在 Demo 中,我们以一个简单的流程图为例,实现如下的效果。","position":{"start":{"line":7,"column":1,"offset":214},"end":{"line":7,"column":32,"offset":245},"indent":[]}},{"type":"image","title":null,"url":"https://cdn.nlark.com/yuque/0/2019/gif/244306/1570264721327-6afda2c1-2edf-4bb4-84dc-14f91f820d0c.gif#align=left&display=inline&height=545&name=demo.gif&originHeight=545&originWidth=1207&search=&size=166134&status=done&width=1207","alt":"demo.gif","position":{"start":{"line":7,"column":32,"offset":245},"end":{"line":7,"column":273,"offset":486},"indent":[]}}],"position":{"start":{"line":7,"column":1,"offset":214},"end":{"line":7,"column":273,"offset":486},"indent":[]}},{"type":"heading","depth":3,"children":[{"type":"link","url":"#功能及实现","title":null,"children":[],"data":{"hProperties":{"aria-label":"功能及实现 permalink","class":"anchor"},"hChildren":[{"type":"raw","value":"<svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg>"}]}},{"type":"text","value":"功能及实现","position":{"start":{"line":9,"column":5,"offset":492},"end":{"line":9,"column":10,"offset":497},"indent":[]}}],"position":{"start":{"line":9,"column":1,"offset":488},"end":{"line":9,"column":10,"offset":497},"indent":[]},"data":{"id":"功能及实现","htmlAttributes":{"id":"功能及实现"},"hProperties":{"id":"功能及实现"}}},{"type":"paragraph","children":[{"type":"text","value":"Demo 包括以下功能点:","position":{"start":{"line":10,"column":1,"offset":498},"end":{"line":10,"column":14,"offset":511},"indent":[]}}],"position":{"start":{"line":10,"column":1,"offset":498},"end":{"line":10,"column":14,"offset":511},"indent":[]}},{"type":"list","ordered":false,"start":null,"spread":false,"children":[{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"text","value":"自定义节点;","position":{"start":{"line":12,"column":3,"offset":515},"end":{"line":12,"column":9,"offset":521},"indent":[]}}],"position":{"start":{"line":12,"column":3,"offset":515},"end":{"line":12,"column":9,"offset":521},"indent":[]}}],"position":{"start":{"line":12,"column":1,"offset":513},"end":{"line":12,"column":9,"offset":521},"indent":[]}},{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"text","value":"自定义边;","position":{"start":{"line":13,"column":3,"offset":524},"end":{"line":13,"column":8,"offset":529},"indent":[]}}],"position":{"start":{"line":13,"column":3,"offset":524},"end":{"line":13,"column":8,"offset":529},"indent":[]}}],"position":{"start":{"line":13,"column":1,"offset":522},"end":{"line":13,"column":8,"offset":529},"indent":[]}},{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"text","value":"节点的 tooltip;","position":{"start":{"line":14,"column":3,"offset":532},"end":{"line":14,"column":15,"offset":544},"indent":[]}}],"position":{"start":{"line":14,"column":3,"offset":532},"end":{"line":14,"column":15,"offset":544},"indent":[]}}],"position":{"start":{"line":14,"column":1,"offset":530},"end":{"line":14,"column":15,"offset":544},"indent":[]}},{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"text","value":"边的 tooltip;","position":{"start":{"line":15,"column":3,"offset":547},"end":{"line":15,"column":14,"offset":558},"indent":[]}}],"position":{"start":{"line":15,"column":3,"offset":547},"end":{"line":15,"column":14,"offset":558},"indent":[]}}],"position":{"start":{"line":15,"column":1,"offset":545},"end":{"line":15,"column":14,"offset":558},"indent":[]}},{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"text","value":"节点上面弹出右键菜单;","position":{"start":{"line":16,"column":3,"offset":561},"end":{"line":16,"column":14,"offset":572},"indent":[]}}],"position":{"start":{"line":16,"column":3,"offset":561},"end":{"line":16,"column":14,"offset":572},"indent":[]}}],"position":{"start":{"line":16,"column":1,"offset":559},"end":{"line":16,"column":14,"offset":572},"indent":[]}},{"type":"listItem","spread":false,"checked":null,"children":[{"type":"paragraph","children":[{"type":"text","value":"tooltip 及 ContextMenu 如何渲染自定义的 React 组件。","position":{"start":{"line":17,"column":3,"offset":575},"end":{"line":17,"column":43,"offset":615},"indent":[]}}],"position":{"start":{"line":17,"column":3,"offset":575},"end":{"line":17,"column":43,"offset":615},"indent":[]}}],"position":{"start":{"line":17,"column":1,"offset":573},"end":{"line":17,"column":43,"offset":615},"indent":[]}}],"position":{"start":{"line":12,"column":1,"offset":513},"end":{"line":17,"column":43,"offset":615},"indent":[1,1,1,1,1]}},{"type":"paragraph","children":[{"type":"text","value":"在 React 中,通过 ","position":{"start":{"line":19,"column":1,"offset":617},"end":{"line":19,"column":14,"offset":630},"indent":[]}},{"type":"html","value":"<code class=\"language-text\">**ReactDOM.findDOMNode(ref.current)**</code>","position":{"start":{"line":19,"column":14,"offset":630},"end":{"line":19,"column":53,"offset":669},"indent":[]}},{"type":"text","value":"** **获取到真实的 DOM 元素。","position":{"start":{"line":19,"column":53,"offset":669},"end":{"line":19,"column":72,"offset":688},"indent":[]}}],"position":{"start":{"line":19,"column":1,"offset":617},"end":{"line":19,"column":72,"offset":688},"indent":[]}},{"type":"html","lang":"javascript","meta":null,"value":"<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useEffect<span class=\"token punctuation\">,</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> ReactDOM <span class=\"token keyword\">from</span> <span class=\"token string\">'react-dom'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> data <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./data'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token constant\">G6</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@antv/g6'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">const</span> ref <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">useRef</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">let</span> graph <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>graph<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n graph <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">G6<span class=\"token punctuation\">.</span>Graph</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n container<span class=\"token punctuation\">:</span> ReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">findDOMNode</span><span class=\"token punctuation\">(</span>ref<span class=\"token punctuation\">.</span>current<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n width<span class=\"token punctuation\">:</span> <span class=\"token number\">1200</span><span class=\"token punctuation\">,</span>\n height<span class=\"token punctuation\">:</span> <span class=\"token number\">800</span><span class=\"token punctuation\">,</span>\n modes<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">default</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'drag-canvas'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n layout<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n type<span class=\"token punctuation\">:</span> <span class=\"token string\">'dagre'</span><span class=\"token punctuation\">,</span>\n direction<span class=\"token punctuation\">:</span> <span class=\"token string\">'LR'</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n defaultNode<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n shape<span class=\"token punctuation\">:</span> <span class=\"token string\">'node'</span><span class=\"token punctuation\">,</span>\n labelCfg<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n style<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n fill<span class=\"token punctuation\">:</span> <span class=\"token string\">'#000000A6'</span><span class=\"token punctuation\">,</span>\n fontSize<span class=\"token punctuation\">:</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n style<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n stroke<span class=\"token punctuation\">:</span> <span class=\"token string\">'#72CC4A'</span><span class=\"token punctuation\">,</span>\n width<span class=\"token punctuation\">:</span> <span class=\"token number\">150</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n defaultEdge<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n shape<span class=\"token punctuation\">:</span> <span class=\"token string\">'polyline'</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n graph<span class=\"token punctuation\">.</span><span class=\"token function\">data</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n graph<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">return</span> <span class=\"token operator\">&lt;</span>div ref<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>ref<span class=\"token punctuation\">}</span><span class=\"token operator\">></span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n</code></pre></div>","position":{"start":{"line":21,"column":1,"offset":690},"end":{"line":71,"column":4,"offset":1682},"indent":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]}},{"type":"heading","depth":3,"children":[{"type":"link","url":"#g6中渲染react组件","title":null,"children":[],"data":{"hProperties":{"aria-label":"g6中渲染react组件 permalink","class":"anchor"},"hChildren":[{"type":"raw","value":"<svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg>"}]}},{"type":"text","value":"G6中渲染React组件","position":{"start":{"line":73,"column":5,"offset":1688},"end":{"line":73,"column":17,"offset":1700},"indent":[]}}],"position":{"start":{"line":73,"column":1,"offset":1684},"end":{"line":73,"column":17,"offset":1700},"indent":[]},"data":{"id":"g6中渲染react组件","htmlAttributes":{"id":"g6中渲染react组件"},"hProperties":{"id":"g6中渲染react组件"}}},{"type":"paragraph","children":[{"type":"text","value":"节点和边的 tooltip、节点上的右键菜单,G6 中内置的很难满足样式上的需求,这个时候我们就可以通过渲染自定义的 React 组件来实现。Tooltip 和 ContextMenu 都是普通的 React 组件,样式完全由用户控制。交互过程中,在G6 中需要做的事情就是确定何时渲染组件,以及渲染到何处。在 G6 中获取到是否渲染组件的标识值和渲染位置后,这些值就可以使用 React state 进行管理,后续的所有工作就全部由 React 负责了。","position":{"start":{"line":74,"column":1,"offset":1701},"end":{"line":74,"column":229,"offset":1929},"indent":[]}}],"position":{"start":{"line":74,"column":1,"offset":1701},"end":{"line":74,"column":229,"offset":1929},"indent":[]}},{"type":"html","lang":"javascript","meta":null,"value":"<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 边tooltip坐标</span>\n<span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>showNodeTooltip<span class=\"token punctuation\">,</span> setShowNodeTooltip<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>nodeTooltipX<span class=\"token punctuation\">,</span> setNodeToolTipX<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>nodeTooltipY<span class=\"token punctuation\">,</span> setNodeToolTipY<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 监听node上面mouse事件</span>\ngraph<span class=\"token punctuation\">.</span><span class=\"token function\">on</span><span class=\"token punctuation\">(</span><span class=\"token string\">'node:mouseenter'</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">evt</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> item <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> evt<span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">const</span> model <span class=\"token operator\">=</span> item<span class=\"token punctuation\">.</span><span class=\"token function\">getModel</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> x<span class=\"token punctuation\">,</span> y <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> model<span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">const</span> point <span class=\"token operator\">=</span> graph<span class=\"token punctuation\">.</span><span class=\"token function\">getCanvasByPoint</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token function\">setNodeToolTipX</span><span class=\"token punctuation\">(</span>point<span class=\"token punctuation\">.</span>x <span class=\"token operator\">-</span> <span class=\"token number\">75</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token function\">setNodeToolTipY</span><span class=\"token punctuation\">(</span>point<span class=\"token punctuation\">.</span>y <span class=\"token operator\">+</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token function\">setShowNodeTooltip</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 节点上面触发mouseleave事件后隐藏tooltip和ContextMenu</span>\ngraph<span class=\"token punctuation\">.</span><span class=\"token function\">on</span><span class=\"token punctuation\">(</span><span class=\"token string\">'node:mouseleave'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n <span class=\"token function\">setShowNodeTooltip</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n <span class=\"token operator\">&lt;</span>div ref<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>ref<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n <span class=\"token punctuation\">{</span>showNodeTooltip <span class=\"token operator\">&amp;&amp;</span> <span class=\"token operator\">&lt;</span>NodeTooltips x<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>nodeTooltipX<span class=\"token punctuation\">}</span> y<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>nodeTooltipY<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">}</span>\n <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code></pre></div>","position":{"start":{"line":76,"column":1,"offset":1931},"end":{"line":104,"column":4,"offset":2632},"indent":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]}},{"type":"paragraph","children":[{"type":"text","value":"完整的 Demo 源码请👉戳","position":{"start":{"line":106,"column":1,"offset":2634},"end":{"line":106,"column":16,"offset":2649},"indent":[]}},{"type":"link","title":null,"url":"https://github.com/baizn/g6-in-react","children":[{"type":"text","value":"这里","position":{"start":{"line":106,"column":17,"offset":2650},"end":{"line":106,"column":19,"offset":2652},"indent":[]}}],"position":{"start":{"line":106,"column":16,"offset":2649},"end":{"line":106,"column":58,"offset":2691},"indent":[]},"data":{"hProperties":{"target":"_self","rel":"nofollow"}}},{"type":"text","value":"。","position":{"start":{"line":106,"column":58,"offset":2691},"end":{"line":106,"column":59,"offset":2692},"indent":[]}}],"position":{"start":{"line":106,"column":1,"offset":2634},"end":{"line":106,"column":59,"offset":2692},"indent":[]}},{"type":"paragraph","children":[{"type":"text","value":"关于 G6 如何在 Vue 及 Angular 中使用,还望社区中有相关实践的同学能提供一些,供其他同学学习和参考,非常感谢!","position":{"start":{"line":108,"column":1,"offset":2694},"end":{"line":108,"column":64,"offset":2757},"indent":[]}}],"position":{"start":{"line":108,"column":1,"offset":2694},"end":{"line":108,"column":64,"offset":2757},"indent":[]}}],"position":{"start":{"line":1,"column":1,"offset":0},"end":{"line":109,"column":1,"offset":2758}}}}