ZBLOG

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

1. 使用 shouldUpdate

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

  1. <Form.Item
  2. label="每单可选物品上限:"
  3. name="goodsLimit"
  4. validateTrigger="onBlur"
  5. rules={[
  6. { required: true, message: '请输入每单可选物品上限' },
  7. {
  8. validator: (_, value) => {
  9. if (!value || (value >= 1 && value <= 99)) {
  10. return Promise.resolve();
  11. }
  12. return Promise.reject(new Error('请输入1~99之间的整数'));
  13. },
  14. },
  15. ]}
  16. labelCol={{ span: 24 }}
  17. wrapperCol={{ span: 24 }}
  18. >
  19. <Input className="header-left-input" type="number" placeholder="请输入1~99之间的整数" />
  20. </Form.Item>
  21. <Form.Item shouldUpdate>
  22. {({ getFieldError }) => {
  23. const errors = getFieldError('goodsLimit');
  24. return (
  25. <div style={{ color: 'red', height: '20px' }}>
  26. {errors.length > 0 ? errors[0] : null}
  27. </div>
  28. );
  29. }}
  30. </Form.Item>

2. CSS 样式调整

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

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

然后在 JSX 中引用它:

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

3. 用 validateStatus 控制样式

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

例如:

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

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

总结

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?