Skip to main content

useForm

用于配置自定义表单的 hooks。

引入​

import {HooksForm, useForm} from '@baidu/acud-pro-components';

基本用法​

function App() {
const controls = (props, options) => {
return [
{
type: 'radio',
name: 'trainMethod',
label: '训练方式',
defaultValue: 'standAlone',
config: {
options: [
{label: '单机模型', value: 'standAlone'},
{label: '分布式模型', value: 'distributed'}
]
},
rules: [{required: true, message: '请选择训练方式'}]
},
{
type: 'input',
name: 'datasetId',
label: '数据集',
config: {
subType: 'text',
placeholder: '请输入数据集',
limitLength: 50
},
},
{
type: 'input',
name: 'name',
label: '任务名称',
config: {
subType: 'text',
placeholder: '请输入任务名称',
limitLength: 50
},
rules: [
{required: true, message: '任务名称不可为空'}
],
extra: '中英文、数字和下划线组成,不能以下划线开头,2-50个字符',
infoIcon: {
tooltipProps: {
title: '时序预测任务暂且只支持单机模型训练'
}
}
},
{
type: 'input',
name: 'splitRatio',
label: '拆分比例',
defaultValue: 0.8,
config: {
subType: 'number',
placeholder: '请输入拆分比例',
step: 0.1,
min: 0.1,
max: 0.9
},
rules: [
{required: true, message: '请填写拆分比例'},
{pattern: /^0\.[1-9]$/, message: '请输入0-1之间的数,最多保留1位小数'}
]
}
];
};

const ProForm = React.forwardRef((props, ref) => {
const options = {
controls,
formItemOption: {
noStyle: true
}
};
const {formRef, formProps} = useForm(ref, {...props}, options);

const moreSettingCollapsed = {
label: 'datasetId',
defaultExpand: false
};

return (
<HooksForm
title="表单标题"
description="表单描述"
moreSettingCollapsed={moreSettingCollapsed}
wrappedComponentRef={formRef}
{...formProps}
/>
);
});

return (
<ProForm />
);
}

API​

useForm 参数​

参数说明类型默认值
refforwardRefany--
propspropsany--
options配置数据UseFormOptions--

UseFormOptions​

参数说明类型默认值
type类型,只在分步表单时传入stepstring--
controls表单项配置方法ControlsType--
actionConfig初始化 fetch / options配置 / submit 提交数据请求ActionConfig--
customFunctions自定义方法object--
formItemOptionformItem 表单项参数object--
stepConfig分步表单额外配置StepFormConfig--
/**
* 表单项配置方法类型
*/
type ControlsType = (
props: HooksFormProps,
options: object,
customFunctions: object,
values: object
) => DuFormItemControl[] | StepControls[];

/**
* 初始化 fetch / options配置 / submit 提交数据请求类型
*/
export interface ActionConfig {
fetchDataAction?: FetchDataAction;
fetchOptionsAction?: FetchOptionsAction[];
submitAction?: SubmitAction;
}

/**
* 分步表单额外配置类型
*/
export interface StepFormConfig {
prevText?: string;
prevClick?: () => boolean;
nextText?: string;
nextClick?: (formData: object) => boolean;
endText?: string;
isSavedRealTime?: boolean;
}

HooksFormProps​

参数说明类型默认值
className类名string--
title页面大标题string〡React.component--
type表单类型(normal / step)string--
controlsConfig表单项配置结果DuFormItemControl[]--
formData传入 formData 及 fetchData 的合并结果object--
doSubmit提交方法() => void--
stepIndex在分步表单 (type = step) 情况下,当前步骤数number--
stepButtonConfig在分步表单 (type = step) 情况下,按钮渲染配置() => DuFormItemControl[]--
formItemOptionMerge处理后的 formItem 表单项参数object--

actionConfig > fetchDataAction​

参数说明类型默认值
formData非接口直接传值给 formobject--
fetchFormAction接口获取表单数据string--
fetchFormPayload接口参数object--
$onFetchFormRequest请求发出前钩子函数(params: object) => void--
$onFetchFormResponse请求返回成功后钩子函数(data: object) => void--

actionConfig > fetchOptionsAction[]​

参数说明类型默认值
name获取后在 controls 中 options 里的 keystring--
action接口获取选项数据的 actionstring--
payload接口获取选项数据的请求参数object--
fetchKeyfetchKey[0] 为 value 对应字段
fetchKey[1] 为 label 对应字段
array--
$onFetchOptionsResponse请求返回成功后钩子函数(options: array) => any--

actionConfig > submitAction​

参数说明类型默认值
submitFormActionsubmit提交接口string--
payload额外的请求参数string[]--
$onSubmitRequest请求发出前钩子函数(params: object) => void--
$onSubmitResponse请求返回成功后钩子函数(data: object) => void--
$onSubmitError请求返回失败后钩子函数(error: object) => void--
$toastSuccessMessage成功提示文案string--
$toastErrorMessage失败提示文案string--

control > common​

DuFormItem 的功能:

  • 配置表单
  • 展示表单数据
  • 改变表单布局
参数说明是否必填类型
type表单项类型string--
name表单控件唯一标志string--
label控件 labelstring--
disabled是否不可用boolean--
defaultValue默认值string--
extra额外的提示信息string--
dynamic可增删控件相关配置(可配置 true 或 object){max, min, rules}--
rules表单校验规则,同 acudArray--
events事件(key 值为事件名)Object--
style自定义样式Object--
onDisplay联动配置OnDisplayItem[]--
config其他配置{subType, placeholder, options, fileList}--
content其他配置自定义组件内容--

control > type​

类型说明子类型
text纯展示文案--
rangePicker日历--
input输入框config: {subType: ' - / number / textarea / password'}
select下拉框config: {mode: ' - /multiple / tags'}
radioradio 选择框config: {subType: ' - / button'}
checkbox复选框config.options存在为多选
cascader级联选择器--
upload上传--
custom自定义组件--
button按钮--

control > onDisplay​

参数说明类型
name关联 controls - namestring
relation与前面所有项的关系(&&、&#124; &#124; '')string
content匹配表达式{relation, exp: '=== / !== / > / < / >= / <= / in / not-in / custom', value}[]