
Sula 是一个面向前端中台的 产品级 配置化框架,希望帮助非专业前端同学可以最小学习成本开发高质量、高体验的前端中台产品。
表单 - 前端同学永远的痛
稍微列列:
- 各种稀奇古怪的表单组件
- 表单组件间的关联关系千奇百怪
- 动态生成表单模板
- 创建表单、编辑表单、查看表单,查看表单变编辑表单……
不就是一些输入框、下拉框吗,前端一把辛酸泪……
antd4.0 form 愈发强大,但面对一大把的表单页,总有那么些场景让人大把掉头发。
试试 Sula CreateForm 帮你守护头发。
完整例子请 移步
场景1 三合一(新建、编辑、查看)表单
通过 mode 来实现一套表单配置应对三种场景,
操作按钮变化
表单组件disabled
场景2 自定义表单操作按钮
通过 actionsRender 自定义,
场景3 表单组件间的显示关联
通过 dependeny.visible 实现显示关联配置
选择性别女时,填写喜欢足球的原因

调查问卷不显示时请求参数自动过滤
场景四 自定义表单组件关联
构想一个奇葩的关联场景,如果选择性别女,且后端返回 {hello: ‘world’} 时,调查问卷填写“喜欢中国女足”
返回匹配

场景1 如何实现
通过mode实现三合一
const render = <CreateForm mode={mode} /> // create, edit, view
场景2 如何实现
通过 actionsRender 实现自定义表单操作按钮
const actionsRender=[{type: 'button',props: {children: 'Custom',},action: ['validateFields',{url: 'https://www.mocky.io/v2/5185415ba171ea3a00704eed',method: 'POST',},() => console.log('Finished!!!')],},]
场景3 如何实现
relates代表影响其关联性的组件name,支持多个影响一个,因此为数组;inputs代表影响其关联的值列表,二位数组中的每个数组对应一个name的值列表;output为inputs值匹配后的输出,即gender组件值为female时,questionnaire显示。
const depConfig = {name: 'questionnaire',label: '调查问卷',field: {type: 'textarea',props: {placeholder: 'why do you like football?',},},initialVisible: false,dependency: {visible: {relates: ['gender'],inputs: [['female']],output: true,defaultOutput: false,},},},
场景4 如何实现
通过自定义关联插件的 ctx.form 实例实现表单组件的精细控制
const customDepConfig = {name: 'questionnaire2',label: '调查问卷2',field: {type: 'textarea',props: {placeholder: 'why do you like football?',},},dependency: {value: {relates: ['gender'],type: (ctx) => {if (ctx.values[0] === 'female') {request({url: 'https://www.mocky.io/v2/5185415ba171ea3a00704eed',method: 'POST',}).then((data) => {if (data.hello === 'world') {ctx.form.setFieldValue(ctx.name, '喜欢中国女足');}});}},},},},
总结一下
- CreateForm 通过 mode 实现三合一表单
- 通过dependency来实现表单关联
- 通过actionsRender实现自定义表单操作按钮
由于Form相关的点太多,该篇只作为了解与入门,有关Form的更多高阶知识将单开一篇文章。
康康 Sula
当前 Sula 1.0 还处于起步阶段(alpha 请不要在生产环境使用),如果你对 Sula 的开发模式感兴趣请扫码入群,欢迎多提宝贵意见,帮助 Sula 快速成长。

