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
相关产品推荐
相关产品推荐

