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

Ant Design Form自定义规则出现`callback`已废弃警告该如何修复?

问题原因

你当前的自定义校验函数只在校验不通过时返回了Promise.reject,校验通过的分支没有返回任何值,Ant Design Form 校验器默认如果没返回Promise就会尝试调用旧版的callback参数,才会抛出这个弃用警告。

修复方案

核心要保证校验器所有分支都有明确的Promise返回值,修复后代码如下:

<Form.Item name="PriceMin" label="最低价格" required>
  <Input
    type="number"
    name="Input"
    placeholder="请输入最低价格"
    onChange={(e) => updateForm(e.target.value, "PriceMin")}
  />
</Form.Item>
<Form.Item
  name="PriceMax"
  label="最高价格"
  dependencies={["PriceMin"]}
  rules={[
    {
      required: true,
      message: "请输入最高价格!", // 修正原代码复制错误的确认密码提示
    },
    ({ getFieldValue }) => ({
      validator(rule, value) {
        const priceMin = parseInt(getFieldValue("PriceMin"));
        const priceMax = parseInt(value);
        // 空值/非数值场景提前返回通过,避免NaN报错
        if (!value || isNaN(priceMax) || isNaN(priceMin)) {
          return Promise.resolve();
        }
        if (priceMax < priceMin) {
          // 如果要保留原土耳其语提示,替换字符串即可
          return Promise.reject("最高价格不能低于最低价格!");
        }
        // 校验通过必须显式返回resolve,这是消除警告的核心修改
        return Promise.resolve();
      },
    }),
  ]}
>
  <Input
    name="Input"
    type="number"
    disabled={
      MyForm.getFieldValue("PriceMin") === undefined ||
      MyForm.getFieldValue("PriceMin") === ""
        ? true
        : false
    }
    placeholder="请输入最高价格"
    onChange={(e) => updateForm(e.target.value, "PriceMax")}
  />
</Form.Item>

如果习惯用async语法可以写得更简洁,效果完全一致:

validator: async (rule, value) => {
  const priceMin = parseInt(getFieldValue("PriceMin"));
  const priceMax = parseInt(value);
  if (!value || isNaN(priceMax) || isNaN(priceMin)) return;
  if (priceMax < priceMin) {
    throw new Error("最高价格不能低于最低价格!");
  }
}

内容的提问来源于stack exchange,提问作者Ugurcan Ucar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:01