|
1 | 1 | --- |
2 | 2 | title: Hook |
| 3 | +order: 5 |
3 | 4 | group: |
4 | 5 | path: /tutorial-advanced |
5 | 6 | title: 自定义组件 |
|
12 | 13 |
|
13 | 14 | ## Hook |
14 | 15 |
|
| 16 | +<img src="https://gw.alipayobjects.com/mdn/rms_19b204/afts/img/A*_74NSZjuTTQAAAAAAAAAAAAAARQnAQ" style="display: block;padding: 12px 0;width: 75%"/> |
| 17 | + |
15 | 18 | ### 概念说明 |
16 | 19 |
|
17 | | -Hook 是 |
| 20 | +在 XFlow 中扩展逻辑都是通过 Hook 来完成,XFlow 内部可以注册 Hook 逻辑来完成对 Graph 配置和 Command 的 扩展 |
| 21 | + |
| 22 | +1. 如何新建 Hook 的配置项 |
| 23 | +2. 有哪些 hook 可以使用 |
| 24 | + |
| 25 | +### 如何使用 |
| 26 | + |
| 27 | +### 如何新建 Hook 的配置项 |
| 28 | + |
| 29 | +```tsx | pure |
| 30 | +import type { NsGraph } from '@antv/xflow' |
| 31 | +import { XFlow, createHookConfig, DisposableCollection } from '@antv/xflow' |
| 32 | + |
| 33 | +export const useGraphHookConfig = createHookConfig(config => { |
| 34 | + config.setRegisterHook(hooks => { |
| 35 | + const disposableList = [ |
| 36 | + // 注册增加 graph options |
| 37 | + hooks.graphOptions.registerHook({ |
| 38 | + name: 'custom-x6-options', |
| 39 | + // before: 'dag-extension-x6-options', |
| 40 | + handler: async options => { |
| 41 | + options.grid = false |
| 42 | + options.keyboard = { |
| 43 | + enabled: true, |
| 44 | + } |
| 45 | + }, |
| 46 | + }), |
| 47 | + ] |
| 48 | + const toDispose = new DisposableCollection() |
| 49 | + toDispose.pushAll(disposableList) |
| 50 | + return toDispose |
| 51 | + }) |
| 52 | +}) |
| 53 | + |
| 54 | +export const Demo = () => { |
| 55 | + const graphHooksConfig = useGraphHookConfig(props) |
| 56 | + return <XFlow hookConfig={graphHooksConfig}></XFlow> |
| 57 | +} |
| 58 | +``` |
| 59 | + |
| 60 | +### 有哪些 hook 可以使用 |
| 61 | + |
| 62 | +Hook 可以分为两种类型: |
| 63 | + |
| 64 | +1. GraphHook: 配置 Graph 相关的配置项 |
| 65 | +2. CommandHook:配置可以修改 Command 参数的逻辑 |
| 66 | + |
| 67 | +#### GraphHook |
| 68 | + |
| 69 | +```tsx | pure |
| 70 | +type IHooks = { |
| 71 | + /* x6 graph 配置项 */ |
| 72 | + graphOptions: HookHub<Graph.Options> |
| 73 | + /* 绑定X6的事件 */ |
| 74 | + x6Events: HookHub<IEventCollection, IEventSubscription> |
| 75 | + /* 自定义节点React组件 */ |
| 76 | + reactNodeRender: HookHub<Map<string, NsGraph.INodeRender>> |
| 77 | + /* 自定义连线label的React组件 */ |
| 78 | + reactEdgeLabelRender: HookHub<Map<string, NsGraph.IEdgeRender>> |
| 79 | + /* 在Graph 实例化后执行的逻辑 */ |
| 80 | + afterGraphInit: HookHub<IGeneralAppService> |
| 81 | + /* 在Graph 销毁前执行的逻辑 */ |
| 82 | + beforeGraphDestory: HookHub<IGeneralAppService> |
| 83 | +} |
| 84 | +``` |
| 85 | +
|
| 86 | +#### CommandHook |
18 | 87 |
|
19 | | -### 如何扩展 |
| 88 | +可以配置 Command 执行参数的扩展逻辑 |
20 | 89 |
|
21 | | -通过以下的方式可以扩展 Hook |
| 90 | +```tsx | pure |
| 91 | +type IHooks = INodeHooks & IEdgeHooks & IGroupHooks & IGraphHooks & IModelHooks |
| 92 | +``` |
0 commit comments