dt-form-renderer 内置了 ant-design 的所有表单控件,所以你可以直接在配置中直接使用 Select、Input、Checkbox 等控件,而不需要手动引用。但是某些情况下,内置的表单控件并不能满足需求,此时你可能需要自定义表单控件。
自定义表单控件需要遵循以下约定
提供受控属性 value 或其它与 valuePropName 的值同名的属性。 提供 onChange 事件或 trigger 的值同名的事件。
-
AutoCompleteant-design AutoComplete 组件 -
Cascaderant-design Cascader 组件 -
Checkboxant-design Checkbox 组件 -
CheckboxGroupant-design Checkbox#Group 组件 -
DatePickerant-design DatePicker 组件 -
DateRangePickerant-design DatePicker#RangePicker 组件 -
DateTimePickerant-design DatePicker#TimePicker 组件 -
YearPickerant-design DatePicker#YearPicker 组件 -
MonthPickerant-design DatePicker#MonthPicker 组件 -
WeekPickerant-design DatePicker#WeekPicker 组件 -
Inputant-design Input 组件 -
InputGroupant-design Input#Group 组件 -
Passwordant-design Input#Password 组件 -
InputSearchant-design Input#Search 组件 -
TextAreaant-design Input#TextArea 组件 -
InputNumberant-design InputNumber 组件 -
Mentionsant-design Mentions 组件 -
Radioant-design Radio 组件 -
RadioButtonant-design Radio#Button 组件 -
RadioGroupant-design Radio#Group 组件 -
Rateant-design Rate 组件 -
Selectant-design Select 组件 -
Sliderant-design Slider 组件 -
Switchant-design Switch 组件 -
TimePickerant-design TimePicker 组件 -
TimeRangePickerant-design TimePicker#RangePicker 组件 -
Transferant-design Transfer 组件 -
TreeSelectant-design TreeSelect 组件 -
Uploadant-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"
}
]