order: 1 title: 开始使用
toc: content
FormRender
一站式中后台 表单解决方案
简介
FormRender 1.0 是下一代的 React.js
表单解决方案。项目从内核级别进行了重写,为了能切实承接日益复杂的表单场景需求。我们的目标是以强大的扩展能力对表单场景 100%的覆盖支持,同时保持开发者能快速上手,并以表单编辑器、插件、自定义组件等一系列周边产品带来极致的开发体验。在开发 1.0 的道路上,我们做了一系列的取舍,详见 0.x - 1.0 迁移文档。
安装
FormRender 依赖 ant design,单独使用不要忘记同时安装 antd。
npm i form-render --save
最简 demo
/**
* transform: true
* defaultShowCode: true
*/
import React from 'react';
import { Button } from 'antd';
import FormRender, { useForm } from 'form-render';
const schema = {
type: 'object',
properties: {
input1: {
title: '简单输入框',
type: 'string',
required: true,
},
select1: {
title: '单选',
type: 'string',
enum: ['a', 'b', 'c'],
enumNames: ['早', '中', '晚'],
},
},
};
const Demo = () => {
const form = useForm();
const onFinish = (formData, errors) => {
console.log('formData:', formData, 'errors', errors);
};
return (
<div>
<FormRender form={form} schema={schema} onFinish={onFinish} />
<Button type="primary" onClick={form.submit}>
提交
</Button>
</div>
);
};
export default Demo;
对于使用类组件的同学,可以使用 connectForm
替代 useForm
hooks。
/**
* transform: true
* defaultShowCode: true
*/
import React from 'react';
import { Button } from 'antd';
import FormRender, { connectForm } from 'form-render';
// import 'antd/dist/antd.css'; 如果项目没有对antd、less做任何配置的话,需要加上
const schema = {
type: 'object',
properties: {
input1: {
title: '简单输入框',
type: 'string',
required: true,
},
select1: {
title: '单选',
type: 'string',
enum: ['a', 'b', 'c'],
enumNames: ['早', '中', '晚'],
},
},
};
class Demo extends React.Component {
onFinish = (formData, errors) => {
console.log('formData:', formData, 'errors', errors);
};
render() {
const { form } = this.props;
return (
<div>
<FormRender form={form} schema={schema} onFinish={this.onFinish} />
<Button type="primary" onClick={form.submit}>
提交
</Button>
</div>
);
}
}
export default connectForm(Demo);
从 demo 中我们不难发现 FormRender 的一些设计:
- 以 schema 来描述表单展示,提交方式与 antd v4 的方式类似。
- schema 以国际标准的 JSON schema 为基础,同时能够方便使用任何 antd 的 props。
- 通过
bind
字段,我们允许数据的双向绑定,数据展示和真实提交的数据可以根据开发需求不同(例如从服务端接口拿到不规则数据时,也能直接使用)。 - 使用
{{...}}
书写表达式来完成简单的联动,值得一提的是,这里表达式支持所有 js 语法。FR 还提供自定义组件、dependencies 声明、watch 等工具用于更加复杂的定制。 - 可以通过
displayType
,labelWidth
等字段轻易修改展示。
高级用法
- 如何写表单间的简单联动关系?
- 如何通过监听实现复杂联动?
- 如何用自定义组件完成定制元素的展示?
- 如何写一个完整的服务端数据表单加载和提交?
想要一个多选组件,该怎么写它的 schema?
很多同学阅读 schema 文档的目的只是如此,建议打开 playground, 点击“基础控件”。这里有所有 FormRender 支持的展示以及对于的 schema。