背景

最近答疑群里好多人经常有人问 const app = useXFlowApp 的使用。
image.png
个人感觉这东西还是挺重要,感觉可以专门写个文档放到官网上。大概加到这个位置
image.png

App 实例

App 的 XFlow 向外暴露的一个重要对象,它上面挂载了很多重要的属性和方法。

获取方式

XFlow 提供了 useXFlowApp 这个 hook 用于获取 App 实例。

  1. import { useXFlowApp } from '@antv/xflow'
  2. export const demo = () => {
  3. const app = useXFlowApp();
  4. return <div><div/>
  5. }

使用注意

  • useXFlowApp 是基于 React Context 实现的,并且它本身是个 Hook,所以只能在 XFlow 工作台组件的子组件下或自定义 hook 中使用。
  • App 实例是异步加载的,所以在组件内使用时,需要先判断是否为 null,以防止报错。
  • image.png

    属性和方法

    App 实例是由类(Class)实例化产生的,上面有众多方法和属性。

    属性

    | 属性名 | 类型接口 | 描述 | 是否只读 | | —- | —- | —- | —- | | graphProvider | IGraphProvider | Graph 图提供者 | 只读 | | commandService | IGraphCommandService | 命令中心 | 只读 | | modelService | IModelService | 全局状态管理中心 | 只读 |

方法

方法名 参数 返回值 描述 同/异步
getGraphInstance / 画布实例 获取画布实例 同步
getGraphConfig / 画布配置项 获取画布配置项 同步
getGraphData / 画布数据(节点和边) 获取
画布数据(节点和边)
异步
getAllNodes / 画布所有节点 获取画布所有节点 异步
getNodeById nodeId: string 指定 id 的节点 异步
getAllEdges / 画布所有边 异步
getEdgeById edgeId:string 指定 id 的边 异步
updateNodeAttrs node: string | X6Node
attrs: Registry.Attr.CellAttrs
/ 异步
updateEdgeAttrs edge: string | X6Edge,
attrs: Registry.Attr.CellAttrs
/ 异步
translateGraph tx: number
ty: number
/ 异步
executeCommand 参考 CommandService 的使用 / 和执行 commandService.excuteCommand 相同 异步
executeCommandPipeline 参考 CommandService 的使用 / 和执行 commandService.excuteCommand 相同 异步

注意事项
以上方法中,同步方法会直接返回值,但是异步方法返回的是一个 Promise