# 教程

# 介绍

我们在写一些常规后台页面的时候,避免不了是需要经常和表单打交道。所以可以想偷懒的小伙伴可能会考虑有没有办法不去做表单工程师?用代码解决重复的人肉工作,没错,我们可以通过 JSON Schema (opens new window) 来描述我们的表单信息,这比重复的写表单控件可方便多了。

但是 JSON Schema 到表单的映射,则是需要我们去关注的,so... 业界有没有比较好的方案呢?答案是肯定的,比如以下几个表单渲染工具:

Formliy 是一款比较强大的表单渲染器,目前对 React 支持最友好,Vue 相关的有一个 vue-formly (opens new window) 但也仅仅是 Vue 2.x 的。还有就是 Formliy 过于强大,不仅仅支持 JSON Schema 还支持 JSX Schema 渲染表单。而我们只是单纯需要像 Form Render (opens new window) 这样的 JSON Schema 标准的轻量易用型框架。

所以 有了这个 基于 Vue 3.x 的 Form render (opens new window)

# 基于 form-render

vue3.x form render 是基于 form rendervue 3.x 版本的实现,所以可以有 form render 的一切优势,比如极简API:

<FormRender
  :schema="schema"
  :formData="formData"
  @on-change="change"
  @on-validate="validate"
/>

# 规范协议

schema 的设计上,我们也是依赖于国际标准的 JSON Schema 规范,并在此基础上添加几条简单约定,满足表单 UI 更丰富表达:

  • JSON schema 是 vue-form-render 的 schema 的一个子集,可以无缝接入
  • 有别于 JSON schema 的扩展的字段,都用 ui: 开头
  • 所有表单元素都有的 ui 属性各给一个独立字段,例如ui:disabled、ui:hidden
  • 只有某些表单元素用的到的 ui 属性统一存放在 ui:options,详见uiSchema 配置

随着form-render 表单设计器的接入,协议层对于用户已经可看做实现细节,通过表单设计器,大伙可以轻松搭建表单,生成对应 schema