amis:低代码前端框架的实战指南

2025-07-02 08:30:10

在现代 Web 应用开发中,随着业务需求日益复杂,开发者需要频繁地构建表单、列表、弹窗等常见 UI 组件。为了提升开发效率并降低维护成本,百度开源了一款名为 amis 的低代码前端框架。amis 允许开发者通过 JSON 配置文件定义页面结构和交互逻辑,从而实现无需编写大量 HTML、CSS 和 JavaScript 即可完成页面搭建的目标。

amis 的设计初衷是“以数据驱动 UI”,其核心思想是将 UI 构建抽象为 JSON 描述语言,并通过内置渲染引擎动态生成界面。这种模式不仅适用于后台管理系统、运营平台等数据密集型项目,也广泛应用于快速原型设计、配置化系统建设等场景。

Logo

核心架构与工作原理

amis 的核心是一个基于 React 构建的 UI 渲染引擎,它接收一个符合特定 Schema 的 JSON 对象作为输入,解析其中的组件类型、属性、事件绑定等信息,并将其转换为对应的 React 组件树进行渲染。整个过程完全由 amis 内部处理,开发者只需关注 JSON 配置即可。

amis 支持的组件种类丰富,包括但不限于:

  • 表单(Form)
  • 表格(Table)
  • 弹窗(Dialog)
  • 折叠面板(Collapse)
  • 步骤条(Steps)
  • 卡片(Card)
  • 按钮(Button)

每个组件都可通过 JSON 属性进行高度定制,例如设置字段校验规则、绑定远程数据源、定义条件显示逻辑等。此外,amis 还提供了强大的变量表达式系统,支持使用 ${expression} 形式进行动态值计算。

amis 的运行流程如下:

  1. 开发者编写或通过可视化编辑器生成 JSON 配置。
  2. amis 引擎加载该 JSON 并解析出组件结构。
  3. 根据配置创建对应的 React 组件实例。
  4. 渲染到指定 DOM 容器中,用户可进行交互。
  5. 数据变更时自动触发更新逻辑,保持 UI 与状态同步。

这种机制使得 amis 成为一种真正意义上的“数据即界面”解决方案。

安装与初始化配置

amis 是一个 npm 包,可以通过标准的 Node.js 工具链集成进现有项目。它依赖于 React 环境,因此确保项目已安装 React 和 ReactDOM。

使用 npm 安装 amis

首先,在项目目录下执行以下命令安装 amis:

npm install amis --save

随后,可以在项目的入口文件中导入 amis 的样式和组件:

import 'amis/lib/css/amis.css';
import { render as renderAmis } from 'amis';

const schema = {
  type: 'form',
  api: '/api/submit',
  body: [
    {
      type: 'input-text',
      name: 'name',
      label: '姓名'
    },
    {
      type: 'input-email',
      name: 'email',
      label: '邮箱'
    }
  ]
};

renderAmis({
  type: 'page',
  title: '示例表单',
  body: schema
}, document.getElementById('root'));

上述代码展示了如何通过 renderAmis 方法将 JSON Schema 渲染成实际的 React 页面。

CDN 快速引入

对于小型项目或演示用途,也可以直接通过 CDN 引入 amis:

<!-- CSS -->
<link rel="stylesheet" href="https://unpkg.com/amis@latest/lib/css/amis.css">

<!-- JS -->
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/amis@latest/lib/runtime.js"></script>

<div id="app"></div>

<script>
  const { render } = amis;

  const schema = {
    type: 'form',
    api: '/api/submit',
    body: [
      {
        type: 'input-text',
        name: 'name',
        label: '姓名'
      }
    ]
  };

  render({
    type: 'page',
    title: 'CDN 示例',
    body: schema
  }, document.getElementById('app'));
</script>

这种方式适合快速验证功能或构建静态页面。

JSON Schema 语法详解

amis 的核心在于 JSON Schema 的编写规范。每一个 JSON 对象代表一个 UI 组件,其结构通常包含以下字段:

  • [type](file://d:\VSProjects\awesometop-spider\src\index.ts#L13-L13):组件类型,如 form、table、dialog 等。
  • title:标题文本。
  • className:自定义类名。
  • body:子组件数组,用于嵌套布局。
  • api:数据接口配置,常用于表单提交或表格数据加载。
  • data:初始数据对象,可用于绑定字段值。
  • visibleOn / hiddenOn:条件控制字段是否显示。
  • required / validations:表单校验规则。
  • actions:按钮操作集合。

表单组件示例

下面是一个典型的表单配置:

{
  "type": "form",
  "title": "注册表单",
  "api": "/api/register",
  "body": [
    {
      "type": "input-text",
      "name": "username",
      "label": "用户名",
      "required": true,
      "validations": {
        "minLength": 6,
        "maxLength": 20
      }
    },
    {
      "type": "input-password",
      "name": "password",
      "label": "密码",
      "required": true
    },
    {
      "type": "static",
      "name": "agree",
      "label": "同意协议",
      "text": "我已阅读并同意服务条款",
      "required": true
    }
  ],
  "actions": [
    {
      "type": "reset",
      "label": "重置"
    },
    {
      "type": "submit",
      "label": "注册"
    }
  ]
}

此配置描述了一个具有用户名、密码输入框及提交按钮的注册表单,并设置了字段长度限制和必填项校验。

表格组件示例

表格是 amis 中最常用的展示组件之一,支持分页、筛选、排序等功能:

{
  "type": "table",
  "title": "用户列表",
  "source": "${items}",
  "columns": [
    {
      "name": "id",
      "label": "ID"
    },
    {
      "name": "name",
      "label": "姓名"
    },
    {
      "name": "email",
      "label": "邮箱"
    }
  ],
  "perPage": 10,
  "api": "/api/users"
}

该表格会从 /api/users 接口获取数据,并按照每页 10 条记录的方式展示。

数据绑定与表达式系统

amis 支持丰富的数据绑定方式,允许开发者通过 ${expression} 语法引用当前上下文中的变量。

动态绑定字段值

{
  "type": "input-text",
  "name": "greeting",
  "label": "问候语",
  "value": "${'Hello, ' + name}"
}

在这个例子中,greeting 字段的值会根据 name 字段的输入内容动态变化。

条件控制显示

{
  "type": "input-number",
  "name": "age",
  "label": "年龄"
},
{
  "type": "input-text",
  "name": "school",
  "label": "学校",
  "visibleOn": "${age >= 6 && age <= 18}"
}

age 在 6 到 18 之间时,school 字段才会显示。

自定义数据源

amis 支持通过 sourceapi 字段绑定远程数据源:

{
  "type": "select",
  "name": "country",
  "label": "国家",
  "source": "/api/countries"
}

此时,amis 会向 /api/countries 发送请求,并将返回的数据用于选项渲染。

总结

amis 是一款极具实用价值的低代码前端框架,凭借其基于 JSON 的声明式 UI 设计理念,极大简化了表单、表格、弹窗等常见页面元素的开发流程。通过合理利用其内置组件库、数据绑定机制和表达式系统,开发者可以高效地构建复杂的管理后台、配置中心、审批流程等企业级应用。

无论是通过 npm 集成还是 CDN 直接引入,amis 都提供了灵活的接入方式。结合其强大的 JSON Schema 能力,开发者能够快速响应产品迭代需求,显著提升开发效率。同时,amis 的设计理念强调配置化和可扩展性,使其在各类数据驱动型项目中展现出良好的适应能力。

baidu
amis是百度开源的前端低代码框架,通过 JSON 配置就能生成各种后台页面,极大减少开发成本,甚至可以不需要了解前端。
TypeScript
Apache-2.0
18.4 k