在我的组件的render方法中,我将作为父级的antd Modal组件和作为子级的antd Form组件:
render() {
const myForm = Form.create()(AddNewItemForm);
...
return (
...
<Modal
title="Create new item"
visible={this.state.visible}
onOk={this.handleOk}
onCancel={this.handleCancel}
wrapClassName="vertical-center-modal"
okText="Save new item"
width="600"
>
<myForm />
</Modal>
...
Run Code Online (Sandbox Code Playgroud)
如何通过单击"模态保存"按钮提交表单?
sen*_*sor 28
有一个看起来更干净的新解决方案:
<Form id="myForm">
Run Code Online (Sandbox Code Playgroud)
...
<Modal
...
footer={[
<Button form="myForm" key="submit" htmlType="submit">
Submit
</Button>
]}
>
<CustomForm />
</Modal>
Run Code Online (Sandbox Code Playgroud)
这是因为 Button 的form属性。浏览器支持
原方案作者:https : //github.com/ant-design/ant-design/issues/9380
Chh*_*eng 24
我的解决方案是使用钩子
import { Button, Modal, Form } from 'antd';
export default function ModalWithFormExample() {
const [visible, setVisible] = useState(false);
const [form] = Form.useForm();
const showModal = () => {
setVisible(true)
}
const handleSubmit = (values) => {
console.log(values)
}
const handleCancel = () => {
setVisible(false)
form.resetFields()
};
return (
<>
<Button onClick={showModal}>Open Modal</Button>
<Modal visible={visible} onOk={form.submit} onCancel={handleCancel}>
<Form form={form} onFinish={handleSubmit}>
{/* Any input */}
</Form>
</Modal>
</>
)
}
Run Code Online (Sandbox Code Playgroud)
小智 6
你可以研究官方例子:https : //ant.design/components/form/#components-form-demo-form-in-modal
我的解决方案是将模式对话和表单组件包装在一个新的包装器父组件中,我在其中验证handleCreate方法中的子表单组件.我使用了ref属性来引用FormOnModalWrapper组件中的myForm子组件.我通过包装父组件的道具传递父处理程序到myForm组件实例.
class FormOnModalWrapper extends React.Component {
...
constructor(props) {
this.state =
{
visible: false
....
}
...
showModal = () => {
this.setState({
visible: true,
});
}
handleCreate = () => {
const form = this.form;
form.validateFields((err, values) => {
if (err) {
return;
}
console.log('Received values of form: ', values);
form.resetFields();
this.setState({ visible: false });
});
}
saveFormRef = (form) => {
this.form = form;
}
render() {
...
const myForm= Form.create()(CrateNewItemFormOnModal);
...
return (
<div>
<Button onClick={this.showModal}>Add</Button>
<myForm
visible={this.state.visible}
onCancel={this.handleCancel}
onCreate={this.handleCreate}
ref={this.saveFormRef}
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
在CrateNewItemFormOnModal组件类中,我有一个模态对话组件作为父组件和表单组件作为子组件:
export default class AddNewItemForm extends React.Component {
render() {
...
const { visible, onCancel, onCreate, form } = this.props;
...
return (
<Modal
title="Create new item"
visible={visible}
onOk={onCreate}
onCancel={onCancel}
okText="Create"
>
<Form>
...
</Form>
</Modal>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13945 次 |
| 最近记录: |