g6/packages/site/docs/apis/data/CustomTransform.zh.md
yvonneyx 6179c5d036
docs: add item (node,edge,combo) v5 docs (#5143)
* docs: add nodes docs

* docs: add item edge docs

* docs: refine item (node,edge) docs

* docs: combo docs

* perf: refine model rect item

* docs: add custom data transformer docs

* docs: refine item docs

---------

Co-authored-by: yvonneyx <banxuan.zyx@antgroup.com>
2023-11-15 21:16:17 +08:00

3.5 KiB
Raw Blame History

title order
自定义数据处理器 13

在进行自定义数据处理器之前,请确保您已经熟悉了 G6 数据流和数据结构。相关内容可以参考数据介绍文档

自定义数据处理器涉及以下三个主要步骤:定义、注册和使用。自定义数据处理器 DEMO

定义

自定义数据处理器本质上是一个函数,它负责将用户数据 (user data) 转换为 G6 内部可以理解和处理的格式 (inner data)。

类型CustomDataTransformFn

type CustomDataTransformFn = (
  data: GraphDataChanges,
  options: Record<string, any>,
  graphCore?: GraphCore,
) => GraphDataChanges;

其中 GraphDataChanges 定义如下:

G6 会根据操作类型,将数据变更自动划分为三个部分:待添加(dataAdded)、更新(dataUpdated)和删除(dataRemoved)数据。

type GraphData = {
  nodes?: NodeUserModel[];
  edges?: EdgeUserModel[];
  combos?: ComboUserModel[];
};

type GraphDataChanges = {
  dataAdded: GraphData;
  dataUpdated: GraphData;
  dataRemoved: GraphData;
};

其中,输入数据类型参考 NodeUserModel 输入数据EdgeUserModel 输入数据ComboUserModel 输入数据

请确保您的处理器返回的数据严格遵守 GraphDataChanges 类型定义,以保证处理器能顺利嵌入 G6 的数据处理流程中。

注册

在 G6 中,您需要将自定义的数据处理器注册到扩展点。

import { Graph as BaseGraph, Extensions, extend } from '@antv/g6';

// 注册后方可在实例化或后续 API 调用中使用
const ExtGraph = extend(BaseGraph, {
  transforms: {
    'my-custom-data-transform': myCustomDataTransformFn,
  },
});

使用

注册完成后,您可以在图形实例化或 API 调用中使用自定义数据处理器。

类型: TransformsConfig

// 数据生命周期阶段
type DataLifecycleType = 'read' | 'changeData' | 'updateData' | 'addData' | 'removeData';
type TransformsConfig =
  | string[]
  | {
      type: string;
      /**
       * 决定 transform 函数生效时机,默认只在初始化数据时生效
       * `'all'` 表示在所有数据生命周期阶段激活,也可以指定在一个或多个生命周期阶段
       */
      activeLifecycle: 'all' | DataLifecycleType | DataLifecycleType[];
      [param: string]: unknown;
    }[]
  | TransformerFn[];

完整示例

const myCustomDataTransformFn: CustomDataTransformFn = (
  dataAUR: GraphDataChanges,
  options: Record<string, any>,
  graphCore?: GraphCor,
) => {
  const { dataAdded, dataUpdated, dataRemoved } = dataAUR;

  const processHandler = (data: GraphData, options: Record<string, any>, graphCore?: GraphCore) => {
    // ... 处理逻辑
  };

  return {
    dataAdded: processHandler(dataAdded, options, graphCore),
    dataUpdated: processHandler(dataUpdated, options, graphCore),
    dataRemoved: processHandler(dataRemoved, options, graphCore),
  };
};

const ExtGraph = extend(Graph, {
  transforms: {
    'map-node-size': Extensions.MapNodeSize,
    'my-custom-data-transform': myCustomDataTransformFn,
  },
});

const graph = new ExtGraph({
  // ...其他配置
  transforms: [
    'map-node-size',
    {
      type: 'my-custom-data-transform',
      activeLifecycle: ['read', 'changeData'],
      //  ...options
    },
  ],
});