写点什么

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.02.27 加入

还未添加个人简介

评论

发布
暂无评论
React在函数组件中使用Ant-Design的Form(form组件和按钮属于不同的组件)