美文网首页
form表单组件问题

form表单组件问题

作者: 米古月_f198 | 来源:发表于2020-07-14 10:40 被阅读0次

编辑弹窗,弹窗为父组件,编辑表单为子组件。 弹窗点击确认的时候,需要先得到表单的校验结果。即父组件需要调用子组件函数。
问题点:useRef 不能直接用于函数组件,需要export default forwardRef(TagForm)。

父组件代码

const Tag = (props)=>{
  const [loading,setLoading] = useState(false);
  const [rows,setRows] = useState([]);
  const [modalVisible,setModalVisible] = useState(false);
  const [editId,setEditId] = useState(null);
  const formRef = useRef();
  
  const handleShowModal = (editId)=>{
    setModalVisible(true);
    setEditId(editId);
  };

  const handleCloseModal = ()=>{
    setModalVisible(false);
    setEditId(null);
  };

  const handleDelete=(record)=>{
    Modal.confirm({
      title: '确定删除?',
      content: '删除标签',
      onOk() {
      },
      onCancel() {

      },
    });
  };

  const handleModalOK = ()=>{
    formRef.current.submit();
  };


  const columns = [{
    title: '名称',
    dataIndex: 'tagName',
    key: 'tagName',
  },{
    title: '操作',
    key:'id',
    width: 200,
    render: (text, record) => (
        <span>
            <a onClick={()=>handleShowModal(record.id)}>编辑</a>
            <Divider type="vertical"/>
            <a onClick={()=>handleDelete(record)}>删除</a>
        </span>
    )
  }];

  const titleEl = <div>
    <Button type={`primary`} onClick={()=>handleShowModal(null)} >新增标签</Button>
  </div>;

  return (<>
    <Table rowKey={`id`} title={()=>titleEl} columns={columns} dataSource={rows} loading={loading} pagination={false} />
    <Modal forceRender visible={modalVisible} title={(editId?`修改`:`新增`)} onOk={handleModalOK} onCancel={handleModalCancel}>
      <TagForm ref={formRef} editId={editId} />
    </Modal>
  </>)
};
export default Tag

子组件

import { Form, Input } from 'antd';
import React, {forwardRef, useEffect, useImperativeHandle} from 'react';

const TagForm = ({visible, editId, onCancel, onSuccess},tagFormRef)=>{

  const  [form]  = Form.useForm();
  const {getFieldDecorator, validateFields, resetFields, setFieldsValue} = form;

  useImperativeHandle(tagFormRef,()=>({

    submit:()=>{
      console.log("ss")
    }

  }));

  return <>
      <Form form={form} >
        <Form.Item label={`标签名称`} name={'tagName'}>
          <Input/>
        </Form.Item>
      </Form>
  </>

};
export default forwardRef(TagForm)

相关文章

  • Vue 后台管理项目4-登录页表单验证

    登录页表单验证 1.登录页表单验证 Ⅰ.在饿了吗Form表单组件下,找到表单验证示例 Form 组件提供了表单验证...

  • element form表单封装

    组件封装form表单 引用组件

  • 选中ztree组件中数据没有提交问题

    问题描述 需要对form表单进行保存操作,form表单中的菜单项由ztree组件实现: 菜单项数据已勾选,提交表单...

  • form表单组件问题

    编辑弹窗,弹窗为父组件,编辑表单为子组件。 弹窗点击确认的时候,需要先得到表单的校验结果。即父组件需要调用子组件函...

  • 近期vue开发相关问题

    问题一: 子组件传值给父组件,当使用elementUI是,modal弹框中需要一个form表单,所以我把form表...

  • React Native封装Form表单组件

    React Native封装Form表单组件 为什么我们在移动端开发中急需要一个完善的Form表单组件尼?做过移动...

  • Springboot 页面请求 request.getParam

    1.form表单的提交组件按name提交,所以组件必须有name属性2.form表单method默认是get,ge...

  • ant design

    无状态组件重置表单: 一:引入 二,获取form 三,表单属性,重置事件

  • React antd获取表单数据

    函数组件获取表单数据 1.定义hook 2.传参到Form form={form} 3.交互事件中获取表单数据 代...

  • form表单组件

    设计api form.tsx 使用 接受一个onSubmit事件,指定传入的buttons里的按钮type为sub...

网友评论

      本文标题:form表单组件问题

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