ZBLOG

在使用 Ant Design 的 Form.Item 组件时,如果您遇到表单验证通过时红色提示抖动的问题,通常是因为组件在重新渲染时导致布局变化。可以尝试以下几种解决方案来缓解这个问题:

1. 使用 shouldUpdate

通过在 Form.Item 中添加 shouldUpdate 属性,可以避免不必要的重渲染。例如,您可以让错误信息在状态变化时更新,但不要强制整个表单重新渲染:

<Form.Item
    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.Item shouldUpdate>
{({ getFieldError }) => {
    const errors = getFieldError('goodsLimit');
    return (
        <div style={{ color: 'red', height: '20px' }}>
            {errors.length > 0 ? errors[0] : null}
        </div>
    );
}}
</Form.Item>

2. CSS 样式调整

可以使用 CSS 来防止抖动,例如设置一个固定高度以容纳错误消息。这样,当错误消息消失时,不会影响其他内容的位置:

.error-message {
    color: red;
    height: 20px; /* 设置固定高度 */
}

然后在 JSX 中引用它:

<div className="error-message">
   {form.getFieldError('goodsLimit').map((error, index) => (
       <span key={index}>{error}</span>
   ))}
</div>

3. 用 validateStatus 控制样式

Ant Design 的 Form.Item 支持通过 validateStatus 来控制状态,这样就能避免默认的红色边框和错误消息造成的抖动。

例如:

<Form.Item
   label="每单可选物品上限:"
   name="goodsLimit"
   validateTrigger="onBlur"
   validateStatus={getFieldError('goodsLimit').length > 0 ? 'error' : ''}
   help={getFieldError('goodsLimit').length > 0 ? getFieldError('goodsLimit')[0] : ''}
   labelCol={{ span: 24 }}
   wrapperCol={{ span: 24 }}
>
   <Input className="header-left-input" type="number" placeholder="请输入1~99之间的整数" />
</Form.Item>

这种方式可以将输入框和提示文本分开处理,从而减少因提示文本显示/隐藏而导致的布局变化。

总结

尝试以上几种方法,以减轻或消除验证通过时界面抖动的问题。具体效果可能依赖于您的页面结构和 CSS,因此需要根据实际情况进行调整。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?