ant.design 的from如何取表单值以及设置值,动态绑定

ant.design 的from如何取表单值以及设置值,动态绑定

首先来看一段代码

import React, {useEffect, useRef, useState} from 'react';
import {Button, Checkbox, Form, FormInstance, Input, message} from 'antd';
import {updateInterfaceInfoUsingPost} from "@/services/yuapi/interfaceInfoController";
import {ProForm} from "@ant-design/pro-form";
import useForm = ProForm.useForm;


export type Props = {
  record: API.InterfaceInfo;
}

const UpdateFrom: React.FC<Props> = (props) => {
  useEffect(
    ()=>{
      formRef.setFieldsValue(props.record);
    }
    , [props.record]
  )
  const [data,setData] = useState(props.record);
  const [formRef] = Form.useForm()
  const onFinish = async (values: any) => {
    alert(JSON.stringify(values))
    values = {
      ...values,
      id : props.record?.id
    }
    const res = await updateInterfaceInfoUsingPost(values);
    if(res.code == 0){
      props.handleUpdateModalOpen(false);
      message.success("修改成功");
      props.actionRef.current.reload();
    }else{
      message.error(res.message);
    }
  };
  const onFinishFailed = (errorInfo: any) => {
    console.log('Failed:', errorInfo);
  };
  return (
    <Form
      name="更新接口"
      labelCol={{span: 8}}
      wrapperCol={{span: 16}}
      style={{maxWidth: 600}}
      onFinish={onFinish}
      onFinishFailed={onFinishFailed}
      autoComplete="off"
      form={formRef}
    >
      <Form.Item
      >
        <h1>接口更新</h1>
      </Form.Item>
      <Form.Item
        label="接口名称"
        name="name"
        rules={[{required: true, message: '请输入接口名称'}]}
      >
        <Input/>
      </Form.Item>

      <Form.Item
        label="接口描述"
        name="description"
        rules={[{required: false, message: '请输入接口描述'}]}
      >
        <Input/>
      </Form.Item>
      <Form.Item
        label="接口地址"
        name="url"
        rules={[{required: true, message: '请输入接口地址'}]}
      >
        <Input/>
      </Form.Item>
      <Form.Item
        label="接口调用方法"
        name="method"
        rules={[{required: true, message: '请输入接口调用方法'}]}
      >
        <Input />
      </Form.Item>
      <Form.Item
        label="接口参数信息"
        name="requestParams"
        rules={[{required: false, message: '请输入接口参数信息'}]}
      >
        <Input.TextArea  rows={5}/>
      </Form.Item>
      <Form.Item
        label="接口请求头信息"
        name="requestHeader"
        rules={[{required: false, message: '请输入接口请求头信息'}]}
      >
        <Input.TextArea rows={5}/>
      </Form.Item>
      <Form.Item
        label="接口响应头信息"
        name="responseHeader"
        rules={[{required: false, message: ''}]}
      >
        <Input.TextArea rows={5}/>
      </Form.Item>
      <Form.Item
        label="接口状态"
        name="status"
        rules={[{required: true, message: '请输入接口状态'}]}
      >
        <Input/>
      </Form.Item>


      <Form.Item wrapperCol={{offset: 8, span: 16}}>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  );
}
export default UpdateFrom;

今天我总是想在 Form 表单中绑定值(历时 4h 的修改,最后通过yupi哥的代码得到提示最终解决),并且能够动态修改。

首先理解正确解法,如果在 Form 组件中要想改变他其中 Form.Item 中的值就需要给 Form 绑定一个 form 属性, 用formRef = Form.useForm() 进行定义,需要父组件传过来的值而且需要动态更新的话就需要随时的监听这个值的变化,所以需要用到生命周期函数,用useEffect() 来实现,通过设置 Form.Item 中的 name 属性,用 formRef.setFiledsValue(record) 来进行表单值得赋值。即最终结果:

useEffect(
() => {
    formRef.setFieldsValues(props.record);
},
 [props.record]) 
// 第二个参数表示要监听的变化值。

如果是 ProTable 的话也需要这样进行, ProTable 的 type 变成了 form 时,如果想要控制里面的表单值就需要给ProTable 也设置一个 formRef 属性,然后定义 formRef = useRef<ProFormInstance>() 然后这样设置值 formRef.current?.setFieldsValue(values);

给个案例:

export type Props = {
  values: API.InterfaceInfo;
  columns: ProColumns<API.InterfaceInfo>[];
  onCancel: () => void;
  onSubmit: (values: API.InterfaceInfo) => Promise<void>;
  visible: boolean;
};

const UpdateModal: React.FC<Props> = (props) => {
  const { values, visible, columns, onCancel, onSubmit } = props;

  const formRef = useRef<ProFormInstance>();

  useEffect(() => {
    if (formRef) {
      formRef.current?.setFieldsValue(values);
    }
  }, [values])

  return (
    <Modal visible={visible} footer={null} onCancel={() => onCancel?.()}>
      <ProTable
        type="form"
        formRef={formRef}
        columns={columns}
        onSubmit={async (value) => {
          onSubmit?.(value);
        }}
      />
    </Modal>
  );
};
export default UpdateModal;

总结来说:就是用到了生命周期的 hooks 来监听数据的变化,然后用封装好的表单属性进行赋值一类操作。还是需要读懂框架给的接口文档

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwhking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值