记录antd表单组件的Form.List的一个使用场景 如何自定义一个新的Form表单组件

本文记录了在antd中如何自定义一个新的Form表单组件,并详细阐述了如何利用Form.List实现组件间的联动,特别是在复合组件内部,如何处理组件数据的独立性和联动性。通过一个具体的例子,展示了在Form.List内部使用自定义组件实现表单列表每一项的联动功能。
摘要由CSDN通过智能技术生成

记录antd表单组件的Form.List的一个使用场景

如何自定义一个新的Form表单组件

我们首先要了解,Form.Item 是如何绑定数据的,使用过的人都知道是通过name匹配数据传入组件,在组件数据更新后,将新的数据更新到表单存储。我们可以利用这一点,实现自定义一个新的表单项。这一点antd官方文档也有介绍。

编写简单的组件案例
import React from 'react';
import {
    Form, Input } from 'antd';
const {
    Item } = Form;
const MyFormComponent = ({
     value, onChange }) => {
   
  const triggerChange = changedValue => {
   
    if (onChange) {
   
      onChange(changedValue);
    }
  };
  const onInputChange = e => {
   
    triggerChange(e.target.value);
  };
  //可以是多个表单组件复合组成
  return (
        <Item label="链接" extra="链接" style={
   {
    marginBottom: 0 }}>
          <Input allowClear value={
   value} onChange={
   onInputChange} />
        </Item>
  );
};
export default MyFormComponent;

复合组件,单个组件内部实现联动(举个🌰)

有一个表单,表单有一个列表,列表每一项之间需要实现以下要求:

选择车系(car_series)->获取相应的金融产品数据(fincinal_detail)->限制金融首付比例(down_payment_ratio)

设计表单列表:

  • 列表每一项之间的前三项需要联动;
  • 列表每一项之间需要相互独立,互不影响;
  • 列表的每一项和其他普通表单项一样通过name,自动传入数据。如果数据改变,自动更新表单;

实现思路:

  • 定义一个新的组件,在组件内部处理三项之间的逻辑;
  • 三项数据组合成为一个新的数据car_financial,通过新数据的name绑定到表单的新组件上;
  • 联动组件内部的每一项之间还是使用真实的name绑定;

如此一来,组件前三项一旦更新,就会触发新定义的数据car_financial更新,car_financial更新之后,就会处理前三项的逻辑关系,更新当前可选择的项目,同时不影响表单数据提交验证。

import React, {
    useEffect, useState, useRef } from 'react';
import {
    Form, Cascader, InputNumber } from 'antd';
import {
    connect } from 'umi';

const {
    Item } = Form;
const CascaderCarFinancial = ({
   
  carSeriesData,
  carProps = {
   },
  financialProps = {
   },
  value = {
   },
  financialRate = {
   },
  dispatch,
  onChange = () => {
   },
}) => {
   
  const [financialList, setFinancialList] = useState([]);
  const [carsData, setCarsData] = useState([]);
  const [financialsData, setFinancialsData] = useState([]);
  const [firstPayData, setFirstPayData] = useState({
   });
  const financialRef = useRef(null);
  const rateRef = useRef(null);
  // 更新数据;
  const triggerChange = changedValue => {
   
    if (onChange) {
   
      onChange(changedValue);
    }
  };
  // 获取金融
  const getFinancial = async e 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值