必填的处理
Drip Form
对表单必填的处理提供两种模式
- 只有
formData
中不存在该表单字段时,提示必填 - 当判断表单数据为空时,提示必填
必填校验模式
unitedSchema
顶层支持配置 requiredMode
来配置必填校验模式。
requiredMode
可选两个类型 default
或 empty
.
default 模式
遵循 JSON Schema
规范。只有对象中不存在该属性时,才报错。空字符、null、空数组均不会报错
注意
reuqiredMode
为 default
时,表单数据为''、[]、null、undefined会自动删除字段。
如果希望表单存在以上数据,则使用 empty
模式
代码示例
- App.tsx
- unitedSchema.ts
import DripForm from '@jdfed/drip-form';
import antd from '@jdfed/drip-form-theme-antd';
import unitedSchema from './unitedSchema';
import '@jdfed/drip-form/dist/index.css';
import '@jdfed/drip-form-theme-antd/dist/index.css';
import 'antd/dist/antd.css';
import { useState } from 'react';
function App() {
const [val, setVal] = useState({});
return (
<>
<DripForm
// 表单配置文件
unitedSchema={unitedSchema}
// 导入组件
uiComponents={{ antd }}
//监听数据变化
control={({ formData }) => {
setVal(formData);
}}
></DripForm>
<p>{JSON.stringify(val)}</p>
</>
);
}
export default App;
// 表单配置文件
export default {
type: 'object',
showError: 'change',
ui: {
footer: {
justifyContent: 'right',
margin: 10,
onOk: {
text: '保存',
type: 'primary',
size: 'middle',
shape: 'squash',
},
onCancel: {
text: '重置',
type: 'default',
size: 'middle',
shape: 'squash',
},
},
},
theme: 'antd',
schema: [
{
type: 'string',
title: '输入框',
ui: {
type: 'text',
style: {
width: '100%',
},
theme: 'antd',
},
requiredMsg: '必填',
fieldKey: 'text_PYtl7v',
},
{
type: 'number',
title: '数字输入框',
default: 0,
ui: {
type: 'number',
theme: 'antd',
},
requiredMsg: '必填',
fieldKey: 'number_WzUFr4',
},
{
type: 'boolean',
title: '开关',
default: false,
ui: {
type: 'switch',
theme: 'antd',
},
requiredMsg: '必填',
fieldKey: 'switch_2CKiKE',
},
{
type: 'array',
title: '多选框',
ui: {
type: 'checkbox',
theme: 'antd',
options: [
{
label: '1',
value: '1',
},
{
label: '2',
value: '2',
},
{
label: '3',
value: '3',
},
],
},
requiredMsg: '必填',
fieldKey: 'checkbox_D1b7Nc',
},
],
};
empty 模式
使用 isEmpty
方法判断该字段是否为空。当为''、null、[]、{}均会报错。数字 0 不会报错
代码示例
- App.tsx
- unitedSchema.ts
import DripForm from '@jdfed/drip-form';
import antd from '@jdfed/drip-form-theme-antd';
import unitedSchema from './unitedSchema';
import '@jdfed/drip-form/dist/index.css';
import '@jdfed/drip-form-theme-antd/dist/index.css';
import 'antd/dist/antd.css';
import { useState } from 'react';
function App() {
const [val, setVal] = useState({});
return (
<>
<DripForm
// 表单配置文件
unitedSchema={unitedSchema}
// 导入组件
uiComponents={{ antd }}
//监听数据变化
control={({ formData }) => {
setVal(formData);
}}
></DripForm>
<p>{JSON.stringify(val)}</p>
</>
);
}
export default App;
// 表单配置文件
export default {
type: 'object',
showError: 'change',
requiredMode: 'empty',
ui: {
footer: {
justifyContent: 'right',
margin: 10,
onOk: {
text: '保存',
type: 'primary',
size: 'middle',
shape: 'squash',
},
onCancel: {
text: '重置',
type: 'default',
size: 'middle',
shape: 'squash',
},
},
},
theme: 'antd',
schema: [
{
type: 'string',
title: '输入框',
default: '',
ui: {
type: 'text',
style: {
width: '100%',
},
theme: 'antd',
},
requiredMsg: '必填',
fieldKey: 'text_PYtl7v',
},
{
type: 'number',
title: '数字输入框',
default: 0,
ui: {
type: 'number',
theme: 'antd',
},
requiredMsg: '必填',
fieldKey: 'number_WzUFr4',
},
{
type: 'boolean',
title: '开关',
default: false,
ui: {
type: 'switch',
theme: 'antd',
},
requiredMsg: '必填',
fieldKey: 'switch_2CKiKE',
},
{
type: 'array',
title: '多选框',
default: [],
ui: {
type: 'checkbox',
theme: 'antd',
options: [
{
label: '1',
value: '1',
},
{
label: '2',
value: '2',
},
{
label: '3',
value: '3',
},
],
},
requiredMsg: '必填',
fieldKey: 'checkbox_D1b7Nc',
},
],
};
使用 empty 模式,希望''、[]、{}报错。则需要配合以下相应的关键字来实现必填效果