Events 事件响应

事件的定义

我们在图上的交互行为,其实都会触发事件,比如窗口缩放时,Graphin 会自动更新画布的宽高。又比如画布缩放时,默认只保留 KeyShape。

我们可以通过 G6 的 API 来对事件进行监听。

支持的事件

graph 监听的名称是由 元素 : 事件 的方式组合而成的,例如node:click则表示节点的点击事件。常见的事件如下

元素事件组合的事件名
node / edge / canvasclick (点击事件)node:click, edge:click, canvas:click
node / edge / canvasdblclick (双击事件)node:dblclick,edge:dblclick,canvas:dblclick
node / edge / canvascontextmenu (右键菜单事件)node:contextmenu,edge:contextmenu,canvas:contextmenu

更多事件,请参考 G6 的 Events API

事件的用法

我们使用 graphRef 获得 G6 的 Graph 实例,在 Graph 上监听事件。比如下列代码,我们希望将点击的节点存储起来:

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import Graphin, { Utils } from '@antv/graphin';
  4. import { Toolbar } from '@antv/graphin-components';
  5. const App = () => {
  6. const [state, setState] = React.useState({
  7. selected: [],
  8. data: Utils.mock(10).graphin(),
  9. });
  10. const { data, selected } = state;
  11. const graphRef = React.createRef(null);
  12. React.useEffect(() => {
  13. const { graph } = graphRef.current;
  14. const handleNodeClick = e => {
  15. console.log('node:click', e);
  16. setState({
  17. ...state,
  18. selected: [e.item.get('model')],
  19. });
  20. };
  21. graph.on('node:click', handleNodeClick);
  22. return () => {
  23. // 如果是每次渲染,那就需要解绑事件
  24. graph.off('node:click', handleNodeClick);
  25. };
  26. }, [state]);
  27. return (
  28. <div className="App">
  29. <Graphin data={data} layout={{ name: 'concentric' }} ref={graphRef}></Graphin>
  30. </div>
  31. );
  32. };