dt-form-renderer 内置了 ant-design 的所有表单控件,所以你可以直接在配置中直接使用 Select
、Input
、Checkbox
等控件,而不需要手动引用。但是某些情况下,内置的表单控件并不能满足需求,此时你可能需要自定义表单控件。
自定义表单控件需要遵循以下约定
提供受控属性 value 或其它与 valuePropName 的值同名的属性。 提供 onChange 事件或 trigger 的值同名的事件。
-
AutoComplete
ant-design AutoComplete 组件 -
Cascader
ant-design Cascader 组件 -
Checkbox
ant-design Checkbox 组件 -
CheckboxGroup
ant-design Checkbox#Group 组件 -
DatePicker
ant-design DatePicker 组件 -
DateRangePicker
ant-design DatePicker#RangePicker 组件 -
DateTimePicker
ant-design DatePicker#TimePicker 组件 -
YearPicker
ant-design DatePicker#YearPicker 组件 -
MonthPicker
ant-design DatePicker#MonthPicker 组件 -
WeekPicker
ant-design DatePicker#WeekPicker 组件 -
Input
ant-design Input 组件 -
InputGroup
ant-design Input#Group 组件 -
Password
ant-design Input#Password 组件 -
InputSearch
ant-design Input#Search 组件 -
TextArea
ant-design Input#TextArea 组件 -
InputNumber
ant-design InputNumber 组件 -
Mentions
ant-design Mentions 组件 -
Radio
ant-design Radio 组件 -
RadioButton
ant-design Radio#Button 组件 -
RadioGroup
ant-design Radio#Group 组件 -
Rate
ant-design Rate 组件 -
Select
ant-design Select 组件 -
Slider
ant-design Slider 组件 -
Switch
ant-design Switch 组件 -
TimePicker
ant-design TimePicker 组件 -
TimeRangePicker
ant-design TimePicker#RangePicker 组件 -
Transfer
ant-design Transfer 组件 -
TreeSelect
ant-design TreeSelect 组件 -
Upload
ant-design Upload 组件
声明 getWidgets
函数,这个函数接收自定义控件名称,返回自定义组件,然后通过 props 将 getWidgets
注入到 FormRenderer
中
import FormRenderer from 'dt-form-renderer';
import { EditableTable, Editor } from './customWidgets';
function getWidgets(widgetName) {
switch(widgetName.toLowerCase()) {
case 'editabletable': {
return EditableTable;
}
case `editor`: {
return Editor
}
default: {
return Editor
}
}
}
function FormDemo () {
return(
<FormRenderer
getWidgets={getWidgets}
// ...
>
)
}
然后就可以在 JsonConfig 直接使用了
[
{
"fieldName": "code",
"widget": "Editor"
},
{
"fieldName": "params",
"widget": "EditableTable"
}
]