解决ant design出现:'Instance created by `useForm` is not connect to any Form element

10,068 阅读1分钟

出现的警告:

Instance created by `useForm` is not connect to any Form element. Forget to pass `form` prop警告

参考代码

````jsx
import React, {useEffect} from 'react';
import propTypes from 'prop-types';
import {Button, Form, Input, Modal} from 'antd';

import memoryUtil from '../../util/memoryUtil';

const {Item} = Form;

/*修改分类确认框组件*/
function UpdateCategory(props) {
    const {showStatus, setShowStatus} = props;
    const category = memoryUtil.category; // 从内存中读取分类
    const [form] = Form.useForm();  // 获取form对象

    useEffect(() => {
        // 显示输入框默认字段
        form.setFieldsValue({
            categoryName: category.name,
        });
    }, [category.name, form]);

    // 处理确定回调
    const handleOk = () => {
        setShowStatus(0); //关闭修改分类确认框

    };

    // 处理表单提交
    const onFinish = (values) => {
        console.log('UpdateCategory', values);
    };

    return (
        <Modal
            title="修改分类"
            visible={showStatus === 2}
            onOk={handleOk}
            onCancel={() => setShowStatus(0)}
        >
            <Form
                form={form}
                onFinish={onFinish}
            >
                <Item name="categoryName">
                    <Input placeholder="请输入分类名称"/>
                </Item>
                <Item>
                    <Button htmlType="submit">提交</Button>
                </Item>
            </Form>
        </Modal>
    );
}


/*类型检测*/
UpdateCategory.propTypes = {
    showStatus: propTypes.number.isRequired,
    setShowStatus: propTypes.func.isRequired,
};

export default UpdateCategory;
````

问题原因

  • ant design在Modal中使用Form表单,并且通过Form.useForm(), 获取form对象将其挂载到指定的Form表单后仍会出现'Instance created by useForm is not connect to any Form element. Forget to pass form prop'警告这是由于ant design的Modal组件会在Form表单之前创建,因此当页面初始化时form对象会找不到可关联的Form表单,于是出现上述警告

解决办法

  • 解决办法十分的简单,只要在Modal组件中添加上 getContainer={false} 即可,如同下面的代码:
    <Modal
        getContainer={false}
        title="修改分类"
        visible={showStatus === 2}
        onOk={handleOk}
        onCancel={() => setShowStatus(0)}
    >
        <Form
            form={form}
            onFinish={onFinish}
        >
            <Item name="categoryName">
                <Input placeholder="请输入分类名称"/>
            </Item>
            <Item>
                <Button htmlType="submit">提交</Button>
            </Item>
        </Form>
    </Modal>