ZBLOG

在你提供的代码中,Form.Itemrules 校验是针对用户输入的,而 defaultValue 只在组件初始渲染时生效,不会触发校验。为了确保校验规则能够应用于 defaultValue,你可以考虑以下几种解决方案:

解决方案 1: 使用 initialValues

使用 ForminitialValues 属性来设置初始值,这样可以确保当表单被渲染时,校验规则能够生效。

<Form
    initialValues={{ goodsLimit: editType === "single" ? singleEditRow?.goodsLimit : '' }}
>
    <Form.Item
        layout="vertical"
        label="每单可选物品上限:"
        name="goodsLimit"
        validateTrigger="onBlur"
        rules={[
            { required: true, message: '请输入每单可选物品上限' },
            {
                validator: (_, value) => {
                    if (!value || (value >= 1 && value <= 99)) {
                        return Promise.resolve();
                    }
                    return Promise.reject(new Error('请输入1~99之间的整数'));
                },
            },
        ]}
        labelCol={{ span: 24 }}
        wrapperCol={{ span: 24 }}
    >
        <Input className="header-left-input" type="number" placeholder="请输入1~99之间的整数" />
    </Form.Item>
</Form>

解决方案 2: 在表单提交时进行手动验证

如果需要在表单提交时验证当前字段,可以调用 Ant Design Form 提供的 validateFields() 方法。如下所示:

const handleSubmit = async () => {
    try {
        const values = await form.validateFields();
        // 提交逻辑...
    } catch (errorInfo) {
        console.log('Failed:', errorInfo);
    }
};

// 然后在你的按钮或事件中调用 handleSubmit()

解决方案 3: 自定义验证逻辑

如果你希望实现更复杂的验证逻辑,可以在 useEffect 中监听字段变化,并强制执行验证。

useEffect(() => {
    form.setFieldsValue({ goodsLimit: editType === "single" ? singleEditRow?.goodsLimit : '' });
}, [editType, singleEditRow]);

// 在需要的时候调用 validateFields()

选择最适合你需求的方法来处理默认值和校验问题。希望这些建议对你有所帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19451

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?