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 加入
还未添加个人简介











评论