You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Antd表单仅提交已变更表单项的实现方法咨询

仅提交Antd Form中变更的表单项解决方案

步骤1:启用Form实例控制

首先需要通过Form.useForm()创建Form实例并绑定到组件上,这样才能获取初始值和当前字段值进行对比:

import { Form } from 'antd';

// 在组件内部创建form实例
const [form] = Form.useForm();

// 绑定到Form组件
<Form
    form={form}
    name="basic"
    labelCol={{ span: 8 }}
    wrapperCol={{ span: 16 }}
    initialValues={{
        widgetUuid: widget.uuid,
        paymentMethod: getSelectedPaymentMethod(widget),
        paymentPackage: chargingArrGet(widget)
    }}
    onFinish={onFinishSelect}
    autoComplete="off"
    layout='horizontal'
>
    {/* 表单项内容 */}
</Form>

步骤2:对比初始值与当前值,筛选变更字段

在onFinishSelect方法中,通过Form实例获取初始值和当前提交值,逐一对比字段内容,只处理发生变更的项:

const onFinishSelect = (values: any) => {
    const tenantGroupId = userDetails?.OwnedEnterprises[0]?.groupId || "";
    // 获取表单初始值
    const initialValues = form.getInitialValues();

    // 对比paymentMethod是否变更
    if (values.paymentMethod !== initialValues.paymentMethod) {
        const req = {
            "paymentMethod": values.paymentMethod === 1 ? "AddToBill" : 9,
            "msisdn": activeMsisdn || null,
            "invoiceNo": activeCard?.invoiceNo || null
        }
        dispatch<any>(updatePaymentMethod(tenantGroupId, values.widgetUuid, req));
    }

    // 对比paymentPackage是否变更
    if (values.paymentPackage !== initialValues.paymentPackage) {
        const packageReq = {
            "newRatePlans": [values.paymentPackage]
        }
        dispatch<any>(updateRatePlan(tenantGroupId, values.widgetUuid, packageReq));
    }
}

注意事项:复杂类型值的对比

如果paymentPackage是对象或数组这类复杂类型,浅比较(!==)会不准确,此时可以使用深比较方法,比如引入lodash.isEqual:

import isEqual from 'lodash/isEqual';

// 替换对应的判断逻辑
if (!isEqual(values.paymentPackage, initialValues.paymentPackage)) {
    // 执行提交逻辑
}

额外优化:提取对比逻辑为工具函数

如果表单字段较多,可以把对比逻辑封装成工具函数,复用性更强:

const getChangedFields = (initial: any, current: any) => {
    return Object.keys(current).reduce((changed, key) => {
        if (!isEqual(current[key], initial[key])) {
            changed[key] = current[key];
        }
        return changed;
    }, {} as any);
}

// 在onFinish中使用
const changedFields = getChangedFields(form.getInitialValues(), values);
if (changedFields.paymentMethod) {
    // 提交paymentMethod变更
}
if (changedFields.paymentPackage) {
    // 提交paymentPackage变更
}

内容的提问来源于stack exchange,提问作者Buwaneka Sudheera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:01:23