其他
我们是如何穿过低代码 “⽆⼈区”的:amis与爱速搭中的关键设计
作者|潘征 编辑|邓艳琴
开源项目 amis(https://github.com/baidu/amis)
低代码平台爱速搭(https://aisuda.bce.baidu.com/)
如何进行异步请求发送
如何进行状态管理
组件间的数据共享和界面状态更新
{
"type": "page",
"body": {
"title": "",
"type": "form",
"mode": "horizontal",
"body": [
{
"label": "选项 1",
"type": "radios",
"name": "a",
"inline": true,
"options": [
{
"label": "选项 A",
"value": 1
},
{
"label": "选项 B",
"value": 2
},
{
"label": "选项 C",
"value": 3
}
]
},
{
"label": "选项 2",
"type": "select",
"size": "sm",
"name": "b",
"source": "/amis/api/mock2/options/level2?a=${a}",
"description": "切换<code>选项 1</code>的值,会触发<code>选项 2</code>的<code>source</code> 接口重新拉取"
}
],
"actions": []
}
}
{
"type": "page",
"body": {
"type": "tpl",
"tpl": "Hello World!"
}
}
在已注册的组件池中找到组件并将其依次渲染到页面上
数据 store 的创建
页面常量,如当前用户信息等,仅限爱速搭平台,由后端服务在返回页面配置时进行统一替换
地址栏参数
在组件配置 “data” 域中配置的初始静态数据
首先会先尝试在当前组件的数据域中寻找变量,当成功找到变量时,通过数据映射完成渲染,停止寻找过程;
在当前数据域中没有找到变量时,则向上寻找,在父组件的数据域中,重复步骤 1 和 2;
一直寻找,直到顶级节点,也就是 page 节点,寻找过程结束;
但是如果 url 中有参数,还会继续向上查找这层,所以很多时候配置中可以直接 ${id} 取地址栏参数。
{
"type": "page",
"body": {
"type": "form",
"api": {
"method": "post",
"url": "/amis/api/mock2/form/saveForm"
},
"body": [
{
"type": "input-text",
"name": "name",
"label": "姓名:"
},
{
"name": "email",
"type": "input-email",
"label": "邮箱:"
}
]
}
}
const schema = {
type: 'form',
api: {
method: 'post',
url: '/amis/api/mock2/form/saveForm',
requestAdaptor: function (api) {
return {
...api,
data: {
...api.data, // 获取暴露的 api 中的 data 变量
foo: 'bar' // 新添加数据
}
};
}
},
body: [
{
type: 'input-text',
name: 'name',
label: '姓名:'
},
{
name: 'text',
type: 'input-email',
label: '邮箱:'
}
]
};
提供拖拽组件到页面并生成相应 schema 的能力
调用 amis 框架基于页面当前编辑中的 schema 来渲染预览视图