提交时是否可以通过其父表单验证嵌套组件表单项?
这里是一个例子,我知道我可以用相同的形式处理两个项目,这不是将数据从子组件传递到父组件的最佳方法(这只是一个简单的例子,说明了我的问题)。我的情况比这个例子还要复杂。。
App.js
import React from "react";
import { FormComponentProps } from "antd/lib/form/Form";
import { Input, Form } from "ant";
import ChildComponent from "./ChildComponent";
function App() {
const [state, setState] = React.useState("");
const [childValue, setChildValue] = React.useState("");
const handleSubmit = e => {
e.preventDefault();
props.form.validateFields((err, values) => {
if (!err) {
console.log(state);
console.log(childValue);
}
});
};
const { getFieldDecorator } = props.form;
return (
<Form onSubmit={handleSubmit}>
<Form.Item
label="Name"
labelAlign="left"
colon={false}
labelCol={{ span: 8 }}
wrapperCol={{ span: 14 }}
required={false}
>
{getFieldDecorator("name", {
rules: [
{
required: true
}
]
})(
<Input
type="text"
name="Name"
onChange={e => setState(e.target.value)}
/>
)}
</Form.Item>
<ChildComponent setChildValue={setChildValue} />
</Form>
);
}
const WrappedApp = Form.create({ name: "App" })(App);
export default WrappedApp;
ChildComponent.js
import React, { useEffect } from "react";
import { Input, Form } from "antd";
function ChildComponent(props) {
const [state, setState] = React.useState("");
useEffect(() => {
props.setChildValue(state);
}, [state]);
const { getFieldDecorator } = props.form;
return (
<Form.Item
label="Last"
labelAlign="left"
colon={false}
labelCol={{ span: 8 }}
wrapperCol={{ span: 14 }}
required={false}
>
{getFieldDecorator("last", {
rules: [
{
required: true
}
]
})(
<Input
type="text"
name="Last"
onChange={e => setState(e.target.value)}
/>
)}
</Form.Item>
);
}
export default ChildComponent;
当我从App.js提交表单时,我还想检查ChildComponent.js中项目的有效性。 有没有一种方法可以通过App.js表单传递引用来验证ChildComponent中的项目?
P.s。
我尝试将props.form
从App.js传递给ChildComponent.js。它没有检查ChildComponent项目的验证。