配置指南

事件

使用 GraphEventMap 和 graph.on、graph.off、graph.once 监听公开事件

通过 graph.on()、graph.off()、graph.once() 监听事件。已知事件由公开 GraphEventMap 自动推导 payload:

graph.on('node:click', ({ nodeId, data, nativeEvent }) => {
  console.log(nodeId, data, nativeEvent.clientX, nativeEvent.clientY);
});

graph.on('canvas:wheel', ({ nativeEvent }) => {
  console.log(nativeEvent.deltaY); // WheelEvent
});

graph.once('destroy', () => {
  console.log('destroyed'); // 零参数
});

元素事件中的 nativeEvent 是原始 MouseEvent 或 WheelEvent。兼容字段 event 仍然存在,但已弃用,新代码应使用 nativeEvent。

元素事件

元素事件由交互分发层统一命中并发出,不需要额外启用 click behavior。

  • Node:node:pointerover、node:pointerenter、node:pointermove、node:pointerleave、node:pointerdown、node:click、node:dblclick、node:contextmenu、node:wheel。
  • Edge:edge:pointerover、edge:pointerenter、edge:pointermove、edge:pointerleave、edge:pointerdown、edge:click、edge:dblclick、edge:contextmenu、edge:wheel。
  • Combo:combo:pointerdown、combo:click、combo:dblclick、combo:contextmenu。
  • Canvas:canvas:pointermove、canvas:pointerdown、canvas:pointerup、canvas:click、canvas:dblclick、canvas:contextmenu、canvas:wheel。

精确事件类型分别为 NodeGraphEvent、EdgeGraphEvent、ComboGraphEvent 和 CanvasGraphEvent。节点事件的 nodeId、边事件的 edgeId / edgeIndex / source / target、Combo 事件的 comboId 都是对应 handler 中的必填字段。

选择与拖拽事件

这些事件由内置 Behavior 发出:

  • 选择:node:selectchange、edge:selectchange、selection:clear。
  • 节点拖拽:node:dragstart、node:drag、node:dragend。
  • Combo 拖拽:combo:dragstart、combo:drag、combo:dragend。
  • 边端点拖拽:edge:dragstart、edge:drag、edge:dragend。
  • 框选:brush:select、brush:end。
  • 套索:lasso:select、lasso:end。

只有启用对应 Behavior 时,派生事件才会出现。

生命周期与数据事件

  • 布局:beforelayout、layout:start、layout:end、afterlayout。
  • 渲染:beforerender、afterrender。
  • 容器与销毁:resize、destroy。
  • 数据:datachange、afteradditem、afterremoveitem、afterupdateitem。
  • Combo:combo:collapse、combo:expand。

GraphEventMap 的值是参数元组,而不是单个 payload 类型,因此能够同时表达普通单参数事件和 destroy: [] 这类零参数事件:

import type { GraphEventMap } from '@antv/g6-lite';

type NodeClickPayload = GraphEventMap['node:click'][0];
type DestroyArguments = GraphEventMap['destroy']; // []

取消监听

移除监听时必须使用同一个 handler 引用:

const handler = ({ nodeId }: GraphEventMap['node:click'][0]) => console.log(nodeId);

graph.on('node:click', handler);
graph.off('node:click', handler);

一次性监听:

graph.once('afterrender', ({ nodeCount, edgeCount }) => {
  console.log(nodeCount, edgeCount);
});

自定义事件类型

graph.on/off/once 对未知字符串保留泛型 fallback:

graph.on('business:custom', (payload: { id: string }) => {
  console.log(payload.id);
});

自定义 Behavior 也可通过第二个泛型扩展事件图。当前只提供消费端类型兼容,不提供公开 emit API;不要依赖内部 graph.eventEmitter。详见自定义 Behavior。