UX1 自定义组件工程与加载契约

组件开发工程负责保存可修改源码,dist/ 负责提供平台实际加载的文件。开发时应保证源码元数据与本次构建产物一致;具体契约以当前 Agent 开发辅助工具包和目标项目模板为准。

Copy
my-component/
├── package.json
├── vite.config.ts
├── tsconfig.json
├── public/
│   ├── data.json
│   └── icon.svg
└── src/
    ├── types.ts
    ├── edit.tsx
    ├── use.tsx
    ├── option.tsx
    ├── optionSchema.ts
    └── components/        # 按需放组件内部实现和自定义属性控件

目标项目已有模板时,以模板为准;不要只为匹配上面的示意图移动现有文件。

文件

职责

public/data.json

声明组件名、版本、展示名、默认配置、默认样式、事件和拖拽约束

src/types.ts

定义 IConfig 等组件配置类型

src/edit.tsx

编辑态入口,保证组件在设计画布中可识别、可选中和可预览

src/use.tsx

使用态入口,处理真实数据、交互、隐藏状态和异常兜底

src/option.tsx

属性面板入口,通常渲染 DynamicOptionPanel

src/optionSchema.ts

声明属性面板的视图节点和联动逻辑

public/icon.svg

组件列表中的图标

当前辅助工具包中的 ux-material-contract 要求提供 EditUseOption 三个默认导出,并分别构建为 edit.jsuse.jsoption.js。目标项目使用不同版本模板时,以该模板的契约为准。

下面按当前辅助工具包中的 ux-material-contract 给出一个可解析示例;它不是可直接复制到所有组件的完整模板,实际字段和取值还应从目标工程的同类组件确认:

Copy
{
  "name": "@example/summary-card",
  "label": {
    "zh-cn": "摘要卡片",
    "en": "Summary Card"
  },
  "version": "1.0.0",
  "description": {
    "zh-cn": "展示一项摘要数据",
    "en": "Displays one summary value"
  },
  "icon": "./icon.svg",
  "webType": "dataEntry",
  "config": {
    "title": {
      "zh-cn": "标题",
      "en": "Title"
    },
    "hidden": false
  },
  "configCss": {
    "style": {
      "width": "100%"
    }
  },
  "events": [
    {
      "id": "onClick",
      "name": "点击"
    }
  ]
}

注意:

  • 文件必须是严格 JSON,不能写注释、函数、单引号或尾随逗号。

  • configconfigCss 是新拖入实例的默认值;修改默认值不会自动覆盖页面上已有实例。

  • 当前辅助工具包契约支持示例中的 webType: "dataEntry";旧培训材料还列出 formtablearealayout。具体组件使用哪个值,以目标项目当前模板为准。

  • 业务配置通常绑定到 :config.*:configCss.*;需要初始值时,再在 data.jsonconfigconfigCss 中配置,并与组件实际读取路径保持一致。

  • events[].id 必须与 Use 接收并触发的事件回调名一致。

  • 组件名、版本与 package.jsondist/data.json 是否需要逐项对应,由当前构建模板校验;不要沿用旧项目规则代替当前模板。

编辑态用于设计画布预览。它应正确透传样式和测试标识,能处理残缺配置,并避免在设计时执行不可逆的业务操作。

任意组件在打开页面或保存页面前需要校验配置时,都可以按当前模板的类型契约在 Edit 上挂载 checkOption。培训材料以输入组件为例,但该能力不限于输入组件;校验不通过时返回相应错误提示。

使用态负责真实渲染和交互。下面是常见实现检查,不代表所有组件都必须拥有这些配置:

  • 组件使用 config.hidden 时,按目标工程约定处理隐藏状态。

  • 涉及异步数据时,按业务需要处理未就绪、空数据和查询失败状态。

  • 事件先在 data.json 声明,再通过 Use 收到的同名回调触发。

  • 有多实例场景时,检查实例之间的值、加载状态和请求是否隔离。

属性面板通常把 idscopeoptionSchema 交给 DynamicOptionPanel。面板结构、配置绑定和联动规则见属性面板与联动

平台会读取 data.json 并按当前模板约定加载相应入口。当前辅助工具包要求三入口默认导出,并构建为 SystemJS;遇到组件不出现或白屏时,优先检查:

  • data.json 的名称或版本与加载路径不一致。

  • 对应 JS 文件缺失,或没有默认导出。

  • 构建格式不是当前工具包要求的 SystemJS。

  • JS 引用了目标运行时没有提供的外部模块。

构建和打包检查见开发包、调试包与上传包。精确类型和导入入口以 Agent 开发辅助工具包及目标项目当前版本为准。

  • 事件:在 data.json.events 声明,在 Use 中调用同名回调;属性面板可用 EventAction 为事件配置动作。

  • 方法:需要让页面动作调用组件能力时,在元数据中声明方法,并在运行态注册对应实现。参数能力以目标版本契约为准。

  • 元素依赖:组件配置引用其它页面元素时,应实现目标工程规定的依赖提取能力,使被引用元素更新后可以同步。

  • 保存校验:组件存在保存前置条件时,可通过 Edit.checkOption 返回错误;校验范围不限于输入组件,签名和返回结构以当前模板类型为准。

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send