Skip to content

Commit 74e95d9

Browse files
liaodalin19903k644606347liujiangyuchiga0秦奇
authored
docs: 改造文档「元素 - 节点 - 使用 React 定义节点」 (#6959)
* fix: (iadd demon prorogress) * fix: docs/update-custom-react-node * fix: 修复Fisheye在update时,未更新this.r/this.d (#6956) * fix: 修复Fisheye在·update时,未更新this.r/this.d * fix: options.r/options.d非空判断 --------- Co-authored-by: liujiangyu <[email protected]> * docs: update antv-dagre layout document (#6958) fix #6904 Co-authored-by: 秦奇 <[email protected]> * docs: 改造Fisheye插件文档 (#6960) * docs: 添加 Snapline 插件文档和示例,更新中文和英文手册内容 * docs: 更新 Snapline 插件文档,优化使用场景描述和样式配置示例 * feat: 新增鱼眼放大镜插件文档,包含概述、使用场景、基本用法及配置项详细说明,更新中英文手册内容。 * docs: 更新鱼眼放大镜插件文档,增加样式属性和节点样式的详细说明,优化示例代码和中文翻译,删除API部分内容; --------- Co-authored-by: liujiangyu <[email protected]> * docs: 优化Watermark水印的文档 (#6963) * docs: 添加 Snapline 插件文档和示例,更新中文和英文手册内容 * docs: 更新 Snapline 插件文档,优化使用场景描述和样式配置示例 * feat: 新增鱼眼放大镜插件文档,包含概述、使用场景、基本用法及配置项详细说明,更新中英文手册内容。 * docs: 更新鱼眼放大镜插件文档,增加样式属性和节点样式的详细说明,优化示例代码和中文翻译,删除API部分内容; * docs: 更新水印插件文档,增加概述、使用场景、基本用法及配置项详细说明,优化示例代码和中英文翻译。 --------- Co-authored-by: liujiangyu <[email protected]> * docs: update antv-dagre layout document (#6965) fix #6904 Co-authored-by: 秦奇 <[email protected]> * docs(CreateEdge): 改造文档 [交互 - 内置交互 - CreateEdge 创建边] (#6962) * docs(CreateEdge): 改造文档 [交互 - 内置交互 - CreateEdge 创建边] * docs: 创建边中文文档更新 * docs: 内置交互-createEdge创建边文档删除销毁交互实例部分 * chore(site): optimize ssr in production env (#6970) * docs: update theme overview and custom theme docs (#6939) * docs: 更新主题总览和自定义主题文档 * docs: update toc * chore: pin dumi version to 2.4.17 (#6973) * fix: (iadd demon prorogress) * fix: docs/update-custom-react-node * fix: docs/update-custom-node-react * fix: EdgeFilterLens在触发update时,options.r未赋值给this.r,导致配置未生效;fix: style option的ts类型应该使用CircleStyleProps (#6976) * fix: 当触发update时,options.r未赋值给this.r,导致配置未生效 fix: style option的ts类型应该使用CircleStyleProps * chore: defaultLensStyle改为使用CircleStyleProps,与fisheye plugin保持一致 * chore: 更新edge-filter-lens插件,CircleStyleProps的导入方式增加type前缀 --------- Co-authored-by: liujiangyu <[email protected]> * fix: fix g6-ssr (#6984) * feat(g6-extension-react): react 19 compatibility support (#6972) * feat(g6-extension-react): react 19 compatibility support * fix: test failed * chore(g6-extension-react): 更新 React 和相关类型定义至 19 版本,调整 createRoot 初始化逻辑以支持 React 18+ 的动态导入 * chore(g6-extension-react): 启用动态导入以支持更灵活的模块加载 * fix: 更新 react-dom 引用以支持 React 18+ 的新客户端 API * docs: 优化EdgeFilterLens边过滤镜文档,更新中英文手册内容 (#6975) * docs: 添加边过滤镜插件文档,包含概述、使用场景、基本用法及配置项详细说明,更新中英文手册内容 * docs: 更新EdgeFilterLens文档,增加完整样式属性的参考链接,更新中英文手册内容 --------- Co-authored-by: liujiangyu <[email protected]> * chore: update version (#6985) * docs: update demo links from Codesandbox to Stackblitz (#7000) * fix: 更新fisheye demo里的style属性,与缩略图保持一致 (#7001) Co-authored-by: liujiangyu <[email protected]> * fix: docs/update-custom-node-react * fix: (iadd demon prorogress) * fix: docs/update-custom-react-node * fix: docs/update-custom-node-react * fix: docs/update-custom-node-react rebase origin/v5 --------- Co-authored-by: jiangyu <[email protected]> Co-authored-by: liujiangyu <[email protected]> Co-authored-by: ChiGao <[email protected]> Co-authored-by: 秦奇 <[email protected]> Co-authored-by: avrinfly <[email protected]> Co-authored-by: Yuxin <[email protected]> Co-authored-by: Aaron <[email protected]>
1 parent 0947b86 commit 74e95d9

File tree

3 files changed

+539
-0
lines changed

3 files changed

+539
-0
lines changed

packages/site/docs/manual/element/node/react-node.zh.md

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,234 @@
22
title: 使用 React 定义节点
33
order: 5
44
---
5+
6+
## 简介
7+
8+
在数据可视化领域,为高效率使用 AntV G6,节点定义可采用 React 组件的方式。
9+
为了让用户能更加方便地进行 react 自定义节点,我们提供了 g6-extension-react 库用于集成使用进而为用户提高开发效率。
10+
11+
### g6-extension-react
12+
13+
g6-extension-react 是 AntV G6 图可视化库的一个扩展,它将 React 框架与 G6 进行了集成,使得开发者能够使用 React 组件来定义和渲染 G6 中的节点、边等图元素。通过这种方式,开发者可以充分利用 React 的组件化开发模式、状态管理能力以及丰富的生态系统来构建复杂且交互性强的图可视化应用。
14+
15+
#### 优点
16+
17+
- 组件化开发:在图可视化场景下,节点的设计往往会更加复杂,不仅要考虑多样化的样式呈现,还要兼顾复杂的交互逻辑,这无疑增加了开发的难度和工作量。而使用 g6-extension-react 可以将图中的节点封装成独立的 React 组件,这为解决节点设计的复杂性提供了有效的解决方案。
18+
- 状态管理:React 提供了强大的状态管理机制,如 useState、useReducer 等钩子函数,以及 Redux、MobX 等外部状态管理库。在 g6-extension-react 中,可以利用这些机制轻松管理图元素的状态,实现动态更新。比如,当用户点击某个节点时,可以通过修改节点组件的状态来改变其样式,如颜色、大小等。
19+
- 丰富的生态系统:React 拥有庞大的生态系统,有众多的开源组件和工具可供使用。在 g6-extension-react 中,可以引入这些组件和工具来增强图元素的功能。例如,可以使用 react-icons 库为节点添加图标,使用 react-transition-group 库实现节点的动画效果。
20+
- 易于集成:由于 g6-extension-react 基于 React 开发,它可以很方便地集成到现有的 React 项目中。开发者可以利用现有的 React 开发流程和工具链,快速搭建图可视化应用。
21+
22+
## 使用步骤
23+
24+
### 准备工作
25+
26+
1. 在使用 g6-extension-react 之前,请确保已经安装并创建 React 项目
27+
28+
2. Reac 版本要求:>=16.8.0
29+
30+
3. 如果要支持使用 TypeScrit,需要 tsconfig.json 配置文件支持 jsx 语法
31+
32+
```json
33+
{
34+
"compilerOptions": {
35+
"jsx": "react-jsx"
36+
}
37+
}
38+
```
39+
40+
### 安装依赖
41+
42+
npm 方式安装:
43+
44+
```bash
45+
npm install @antv/g6-extension-react
46+
```
47+
48+
yard 方式安装:
49+
50+
```bash
51+
yarn add @antv/g6-extension-react
52+
```
53+
54+
pnpm方式安装:
55+
56+
```bash
57+
pnpm add @antv/g6-extension-react
58+
```
59+
60+
### 自定义React节点
61+
62+
```jsx
63+
import { ReactNode } from '@antv/g6-extension-react';
64+
65+
const MyReactNode = () => {
66+
return <div>node</div>;
67+
};
68+
```
69+
70+
### 注册节点
71+
72+
```jsx
73+
import { ExtensionCategory, register } from '@antv/g6';
74+
import { ReactNode } from '@antv/g6-extension-react';
75+
76+
register(ExtensionCategory.NODE, 'react-node', ReactNode);
77+
```
78+
79+
### 使用节点
80+
81+
使用自定义的 ReactNode 节点:
82+
83+
```jsx
84+
const graph = new Graph({
85+
// ... other options
86+
node: {
87+
type: 'react-node',
88+
style: {
89+
component: () => <ReactNode />,
90+
},
91+
},
92+
});
93+
```
94+
95+
## 状态管理和交互事件
96+
97+
### 状态管理
98+
99+
在 G6 中,节点状态的管理和样式展示可以通过以下方式实现。
100+
101+
#### G6 内置交互状态管理
102+
103+
在使用内置交互行为(如 hover-activate 或 click-select)时,G6 会自动为节点维护状态。此时,你可以通过访问节点数据中的 data.states 字段来获取当前节点的状态,并依据这些状态来调整节点的样式逻辑。例如,当节点处于 hover 状态时,改变其颜色或大小,以提供更好的交互反馈。
104+
105+
**示例**
106+
107+
假设我们有一个简单的节点,并希望在节点被 hover 时改变其背景颜色。
108+
109+
```jsx
110+
import { Graph } from '@antv/g6';
111+
112+
const graph = new Graph({
113+
...
114+
data: {
115+
nodes: [
116+
{ id: 'node1', x: 100, y: 200 },
117+
{ id: 'node2', x: 300, y: 200 },
118+
],
119+
},
120+
node: {
121+
type: 'react-node',
122+
style: {
123+
component: ({ data }) => {
124+
const backgroundColor = data.states?.hover ? 'lightblue' : 'white';
125+
return (
126+
<div
127+
style={{
128+
...
129+
backgroundColor: backgroundColor,
130+
}}
131+
>
132+
{data.id}
133+
</div>
134+
);
135+
},
136+
},
137+
},
138+
behaviors: ['hover-activate']
139+
});
140+
```
141+
142+
#### React 自定义状态管理
143+
144+
我们也可以通过在节点数据中自定义状态字段,手动管理状态的切换以及样式的更新。比如,你可以在节点数据里添加一个自定义的状态标识,然后在代码中根据这个标识来动态修改节点的样式。这种方式给予开发者更大的灵活性,适用于有特殊需求的场景。你可以通过 data 传入状态,以此让节点展示不同的样式,这就是手动管理状态时的操作方式。
145+
146+
**示例**:
147+
148+
通过 data 添加 selected 参数,实现节点选中和取消选中的样式变化。
149+
150+
graph 实例所需 data 中传递:
151+
152+
```json
153+
const data = {
154+
nodes: [
155+
{
156+
id: 'node1',
157+
data: {
158+
... // other data
159+
selected: true, // selcted status
160+
},
161+
},
162+
...
163+
]
164+
}
165+
```
166+
167+
自定义节点内展示:
168+
169+
```jsx
170+
const MyReactNode = ({ data }) => {
171+
return (
172+
<Card
173+
style={{
174+
width: 500,
175+
padding: 10,
176+
borderColor: data.selected ? 'orange' : '#ddd', // 根据选中状态设置边框颜色
177+
cursor: 'pointer', // 添加鼠标指针样式
178+
}}
179+
>
180+
...
181+
}
182+
```
183+
184+
### 交互事件
185+
186+
我们可以传递回调函数,在节点上与图实例进行交互。
187+
188+
#### 示例:
189+
190+
通过 data 传递回调事件,实现通过自定义节点操作图数据。
191+
192+
注册节点:
193+
通过在 props 定义接受回调函数
194+
195+
```json
196+
const IDCardNode = ({ id, data, onSelectChange }) => {
197+
...
198+
const handleSelect = () => {
199+
onSelectChange()
200+
}
201+
202+
return (
203+
...
204+
<Select
205+
onChange={handleSelect}
206+
...
207+
/>
208+
...
209+
)
210+
}
211+
```
212+
213+
创建 Graph 实例时候,传递 onSelectChange 回调函数:
214+
215+
```jsx
216+
const graph = new Graph({
217+
...
218+
data,
219+
node: {
220+
type: 'react',
221+
style: {
222+
component: (data) => <IDCardNode
223+
id={data.id}
224+
data={{ ...data.data, graph: graph }}
225+
onSelectChange={handleSelectChange} />,
226+
},
227+
},
228+
```
229+
230+
## 在线测试
231+
232+
<div>
233+
<Playground path="element/custom-node/demo/react-node.jsx" rid="react-node-rid"></Playground>
234+
<Playground path="element/custom-node/demo/reactnode-idcard.jsx" rid="reactnode-idcard-rid"></Playground>
235+
</div>

packages/site/examples/element/custom-node/demo/meta.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@
2727
"en": "G2 activity Chart"
2828
},
2929
"screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GVyoQKk2WIIAAAAAAAAAAAAADmJ7AQ/original"
30+
},
31+
{
32+
"filename": "reactnode-idcard.jsx",
33+
"title": {
34+
"zh": "React 节点 身份证",
35+
"en": "React node IDCard"
36+
},
37+
"screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*GVyoQKk2WIIAAAAAAAAAAAAADmJ7AQ/original"
3038
}
3139
]
3240
}

0 commit comments

Comments
 (0)