美文网首页
Antd如何接收Form组件的函数<此功能仅限Antd v3版本

Antd如何接收Form组件的函数<此功能仅限Antd v3版本

作者: 未来好好生活 | 来源:发表于2021-12-20 12:09 被阅读0次

    1. 在React项目中,我们需要在Modal对话框中展示一个form表单的功能,此时我们要拿到封装的form函数和输入的value值?那么我们要分为几步做!

    1.1 假设我们封装了from表单<暂时命名为:AddUpdateForm>

       注:传递form函数时必须在子组件中声明类型,PropTypes 提供一系列验证器,可用于确保组件接收到的数据类型是有效的。当传入的 prop 值类型不正确时,JavaScript 控制台将会显示警告。出于性能方面的考虑
    
    import React, { Component } from 'react'
    import PropTypes from 'prop-types'
    import {
      Form,
      Input
    } from 'antd'
    const Item = Form.Item
    class AddUpdateForm extends Component {
    *注:传递form函数时必须在子组件中声明类型
    static propTypes = {
        setForm: PropTypes.func.isRequired,
        categoryName: PropTypes.string,
      }
    /* 
    添加/修改分类的Form组件
    */
      render() {
        const { getFieldDecorator } = this.props.form
        const { categoryName } = this.props
        return (
          <Form>
            <Item>
              {
                getFieldDecorator('categoryName', {
                  initialValue: categoryName || '',
                  rules: [
                    {required: true, message: '分类名称必须输入'}
                  ]
                })(
                  <Input type="text" placeholder="请输入分类名称"></Input>
                )
              }
            </Item>
          </Form>
        )
      }
    }
    
    export default Form.create()(AddUpdateForm)
    

    *1.2:在父组件页面中引入form子组件后需要设置一个函数名来接收函数<函数名: setForm={form=>this.form=form}>

    *1.2.1:注 > 对象体中是将获取的子组件中的form对象赋值传给父组件的form中
    import React, { Component } from 'react'
    import {
      Card, 
      Table,
      Modal
    } from 'antd'
    import AddUpdateForm from './add-update-form'
    export default class Category extends Component {
      /* 
        点击确定的回调: 去添加/修改分类
      */
      handleOk = () => {
        // 进行表单验证
        this.form.validateFields(async (err, values) => {
          if (!err) {
            // 验证通过后, 得到输入数据
            const { categoryName } = values
            const {showStatus} = this.state
            this.form.resetFields() // 重置输入数据(变成了初始值)
            // 根据响应结果, 做不同处理
          }
        })
      }
      render() {
        return (
          <Card extra={extra}>
            <Table />
            <Modal>
              <AddUpdateForm setForm={form => this.form = form} categoryName={category.name}/>
            </Modal>
          </Card>
        )
      }
    }
    
    此时就可以直接调用this.form获取子组件中的输入值函数方法
    

    相关文章

      网友评论

          本文标题:Antd如何接收Form组件的函数<此功能仅限Antd v3版本

          本文链接:https://www.haomeiwen.com/subject/lptzfrtx.html