React 在函数组件中使用 Ant-Design 的 Form(form 组件和按钮属于不同的组件)
发布于: 2021 年 03 月 17 日
本文所有组件均为 Ant-Design3.x,未使用 Redux,form 组件和按钮是独立的。获取带按钮(提交表单)的 form 组件的数据的方法见官方文档(onFinish)。
之前一直是使用 class 组件,在 class 组件中获取子组件 form 表单值的方法是这样的:
子组件(两者通用):
import React, { Component } from "react";
import { Form, Select, Input } from "antd";
import PropTypes from "prop-types";
const Item = Form.Item;
class AddForm extends Component {
constructor(props) {
super(props);
this.state = {};
}
static propTypes = {
setForm: PropTypes.func.isRequired, // 用来传递form对象的函数
};
componentWillMount() {
this.props.setForm(this.props.form); //把form对象传给父亲
}
render() {
const { getFieldDecorator } = this.props.form;
return (
<Form>
<Item>
{getFieldDecorator("username", { <!-- 定义数据名为username,默认值为"" -->
initialValue: "",
})(<Input type="text" placeholder="输入用户名" />)}
</Item>
</Form>
);
}
}
export default Form.create()(AddForm);
复制代码
父组件:
// 点击添加按钮后触发
addCategory = () => {
this.form.validateFields((err, values) => { //从this.form中获取表单的值
if (!err) {
console.log("Received values of form: ", values); //此时获取到子组件表单的值
}
});
};
... ...
//在父组件中使用Form子组件
<AddForm
setForm={(form) => { //向子组件传递一个方法,这个方法可以改变父组件中this.form的值
this.form = form;
// 在子组件中 form其实就是this.props.form
}}
/>
复制代码
在函数组件中,可以通过这样的方式(hook)获取子组件的数据:
import React, { useState } from "react"; //引入useState
...
const [userData, setUserData] = useState(); //hook
...
// 点击添加按钮后触发
const addOk = () => {
userData.validateFields((err, values) => { //此处的 this.form 变成了userData
if (!err) {
console.log("Received values of form: ", values); //此时获取到值
}
});
setShowModal(0);
};
...
//在负组件中使用Form子组件
<AddForm
setForm={(form) => {
setUserData(form); //注意,此处不同于class组件,而是使用setUserData
// 在子组件中 form其实就是this.props.form
}}
></AddForm>
复制代码
划线
评论
复制
发布于: 2021 年 03 月 17 日阅读数: 15
依旧廖凯
关注
还未添加个人签名 2021.02.27 加入
还未添加个人简介
评论