【发布时间】:2020-03-05 16:53:00
【问题描述】:
从 ant v3.x 迁移到 v4.0.1 后,我无法再从其父组件访问子窗体的方法。
在 3.x 版本中,我可以执行类似以下操作:
//Parent component - TestParent
import * as React from 'react';
import {createRef} from 'react';
export default class TestParent extends React.Component<{}, {}> {
private formRef = createRef<any>();
getFields = () => {
const {form} = formRef.current.props;
form.validateFields... ///etc
}
render() {
return (
<FormComponent
wrappedComponentRef={this.formRef}
/>
<Button onClick={() => {this.getFields()}>Button<Button/>
);
}
}
//Child component - FormComponent
import React from 'react';
import {Input, Form} from 'antd';
interface IProps {
form: any;
}
class FormComponentContainer extends React.Component<Props, {}> {
constructor(props: IProps) {
super(props);
}
render() {
const {form} = this.props;
const {getFieldDecorator} = form;
return (
<Form>
<Form.Item label="Full Name" colon={false}>
{getFieldDecorator('name', {
rules: [{required: true, message: 'Please enter your name'}]
})(<Input placeholder="Please enter your name" />)}
</Form.Item>
</Form>
);
}
}
export const FormComponent: any = Form.create<Props>({
name: 'form'
})(FormComponentContainer);
我可以使用formRef 访问子表单字段。
但是,自从迁移到 ant 4.0.1 后,我无法再使用新表单组件上的 ref 属性访问表单字段:
//Parent component - TestParent
import * as React from 'react';
import {createRef} from 'react';
export default class TestParent extends React.Component<{}, {}> {
private formRef = createRef<any>();
getFields = () => {
const {form} = formRef.current.props;
form.validateFields... ///etc
}
render() {
return (
<FormComponent
formRef={this.formRef}
/>
<Button onClick={() => {this.getFields()}>Button<Button/>
);
}
}
//Child component - FormComponent
import React from 'react';
import {Input, Form} from 'antd';
interface Props {
formRef: any;
}
export default class FormComponentContainer extends React.Component<Props, {}> {
constructor(props: Props) {
super(props);
}
render() {
return (
<Form ref={this.props.formRef}>
<Form.Item
label="Full Name"
colon={false}
name="name"
rules={[{required: true, message: 'Please enter your name'}]}
>
<Input placeholder="Please enter your name" />
</Form.Item>
</Form>
);
}
}
我有什么遗漏吗?父子组件都需要是类组件,而不是函数组件。
【问题讨论】:
标签: reactjs typescript antd