antd(4.x)Modal结合form的复合使用
效果展示:保留Modal的底部按钮
实现功能:
- 通过Modal自带的onOk和onCancel来受控Form表单的校验
- required时onOk校验必传输入框
- 创建时props传Modal-title并清空输入框
- 编辑时props传Modal-title并传入初始值
代码实现:
- modal+form(antd4modal+form只能以函数形式呈现)
export interface ITagModal {
tagVis: boolean,
tagTitle: string,
cancelModal: ()=>void,
addTag: ({tagName:string})=>void,
currentTagValue:IcurrentTagValue
}
export interface IcurrentTagValue{
tagName:string
}
export default function TagModal(props:ITagModal) {
const { tagVis, tagTitle, cancelModal, addTag, currentTagValue } = props
注意:是 React Hooks 的实现,只能用于函数组件,如果使用类组件,通过ref创建
const [form] = Form.useForm();
let initValues = {
tagName: currentTagValue ? currentTagValue.tagName : '',
}
form.setFieldsValue(initValues)
return (
<div>
<Modal
title={tagTitle}
visible={tagVis}
onCancel={cancelModal}
onOk={() => {
form
.validateFields()
.then(values => {
form.resetFields();
form.setFieldsValue(values)
addTag(values);
})
.catch(info => {
console.log('校验失败:', info);
});
}}
>
<Form
form={form}
name="userForm"
initialValues={initValues}
>
<Form.Item
label="标签名称"
name="tagName"
rules={[{ required: true, message: '请确保输入框不为空' }]}
>
<Input />
</Form.Item>
</Form>
</Modal>
</div>
)
}