【Antd】antd form表单的rules文案无法跟随状态重渲染的原因及解决办法

这篇具有很好参考价值的文章主要介绍了【Antd】antd form表单的rules文案无法跟随状态重渲染的原因及解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

我有两个表单项,当我选择出库类型,调用onChange改变inOutType 状态,这时候发现这句代码不生效:

rules={[{ required: true, message: `请选择${Type === 1 ? '持有' : '负责'}` }]}

示例代码

<TypographyForm.Group>
        <TypographyForm.Item
          label="类型"
          name="Type"
          col={{ span: 24 }}
          rules={[{ required: true, message: '请选择类型' }]}
        >
          <Select placeholder="类型" loading={inApplyLoading} onChange={onInOutTypeChange}>
            {inApplyType &&
              inApplyType.data?.[3]?.map((item) => (
                <Select.Option value={item?.dictKey} key={item?.dictKey}>
                  {item?.dictValue}
                </Select.Option>
              ))}
          </Select>
</TypographyForm.Item>

<TypographyForm.Item
          label={Type === 1 ? '持有' : '负责'}
          name="holderCode"
          col={{ span: 24 }}
          rules={[{ required: true, message: `请选择${inOutType === 1 ? '持有' : '负责'}` }]}
        >
          <ContactsInput config={{ key: 'holderCode' }} />
</TypographyForm.Item>

原因

antd官方为了尽量少造成多余的渲染,把这个主动权交由开发者自己来实现,适配更多场景,得到相对优秀的渲染性能文章来源地址https://www.toymoban.com/news/detail-642230.html

解决代码

const onInOutTypeChange = (val) => {
    setType(val);
    // 清除指定字段的规则
    form.setFieldsValue({ holderCode: '' });
    handleValidateFields();
  };

  const handleValidateFields = () => {
    form
      .validateFields(['holderCode'])
      .then((values) => {
        // 校验成功后的操作
        console.log('校验通过', values);
      })
      .catch((errorInfo) => {
        // 校验失败后的操作
        console.log('校验失败', errorInfo);
      });
  };

到了这里,关于【Antd】antd form表单的rules文案无法跟随状态重渲染的原因及解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • antd项目中input框的value值不能被修改,form.setFieldsValue 来动态改变表单值

    目录 一、问题描述         1.1、环境         1.2、问题展示          1.3、问题代码展示          1.4、控制台效果         1.5、解释 二、官网解释         官网链接https://ant.design/components/form-cn 三、解决方案         3.1、修改版部分代码       

    2024年02月15日
    浏览(51)
  • vue3 antd项目实战——Form表单的提交与校验【v-model双向绑定input输入框、form表单数据,动态校验规则】

    本文依旧沿用 ant design vue 组件库和 ts 语言🔥🔥更多内容见Ant Design Vue官方文档 🔥🔥 vue3 antd项目实战——Form表单【后台管理系统 v-model数据的双向绑定,input输入框、Radio单选框的嵌套使用】 在上期文章中,我们完成了 UI界面的渲染 (渲染效果如下图),本期文章将带着大

    2023年04月22日
    浏览(75)
  • 在react antd中动态生成多个 form表单组,包括一个动态添加/删除表单项的功能和一个提交表单的功能

    在这个示例中,我们首先使用 Form.useForm() 创建一个表单实例。接着,我们使用 Form.List 组件来动态生成多个表单项。在 Form.List 组件中,我们使用 fields.map 方法循环渲染每个表单项,并使用 Form.Item 组件包裹每个表单项。在 Form.Item 组件中,我们使用 label 属性指定标签,使用

    2024年02月15日
    浏览(46)
  • Antd-rules-自定义校验规则

    公司UI出了一个表单提交的规则校验效果 需要自定义rules才可以实现 只要输入错误就提示红色边框 并且不可以提交 如何实现? ##解决 antd官方给了案例 自定义校验规则 实现如下: 1,需要自定义rules 2,自定义validator 3,填写你的规则方法 1,需要自定义rules 2,自定义validat

    2024年02月08日
    浏览(28)
  • 基于antd@5.x封装Form.List组件

    基于antd@5.x封装Form.List组件 使用案例

    2024年02月16日
    浏览(77)
  • React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗?

    突然发现 antd 的 getFieldsValue()是可以传一个 true 参数的,如题,React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗? 确实不一样 getFieldsValue 提供了多种重载方法: getFieldsValue(nameList?: true | NamePath[], filterFunc?: FilterFunc) 当不提供 nameList 时,返回所有注册字段,这也包含

    2024年02月11日
    浏览(28)
  • react&antd(12)动态表单的默认值问题

    最近遇到一个需求是有一个表单可以输入各种信息,然后还需要有一个编辑功能,点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法,然后我的思路是使用initialValues搭配setState()使用。默认值都为空,然后点击单条数据时把该条数据需要的字段setState()更

    2024年02月11日
    浏览(33)
  • 用强数据类型保护你的表单数据-基于antd表单的类型约束

    接口数据类型与表单提交数据类型,在大多数情况下,大部分属性的类型是相同的,但很少能做到完全统一。 我在之前的工作中经常为了方便,直接将接口数据类型复用为表单内数据类型,在遇到属性类型不一致的情况时会使用 any 强制忽略类型错误。 后来经过自省与思考,

    2024年02月05日
    浏览(35)
  • 【react框架】结合antd做表单组件的一些心得记录

    作为一个前端最常遇见的需求场景就是写表单、写表格。写多了会逐渐的积累一些开发心得,此文章根据我使用vue和react的经验记录了一些东西,抛砖引玉的给大家看看。 举例react项目,在做表单的很多时候,我都是从antd上把其中一个form组件例子复制下来,然后再看看提供了

    2024年02月07日
    浏览(84)
  • React Antd可编辑单元格,非官网写法,不使用可编辑行和form验证

    antd3以上的写法乍一看还挺复杂,自己写了个精简版 没用EditableRow+Cell的结构,也不使用Context、高阶组件等,不使用form验证 最终效果: 最后使用的时候直接在column元素的render里面EditableCell /EditableCell就好啦, props一定要传处理保存修改的方法 现在这个可编辑单元格组件在鼠

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包