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

问题背景

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

javascript 复制代码
rules={[{ required: true, message: `请选择${inOutType === 1 ? '持有人' : '负责人'}` }]}

示例代码

javascript 复制代码
<TypographyForm.Group>
        <TypographyForm.Item
          label="出库类型"
          name="inOutType"
          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={inOutType === 1 ? '持有人' : '负责人'}
          name="holderEmployeeCode"
          col={{ span: 24 }}
          rules={[{ required: true, message: `请选择${inOutType === 1 ? '持有人' : '负责人'}` }]}
        >
          <ContactsInput config={{ key: 'holderEmployeeCode' }} />
</TypographyForm.Item>

原因

antd官方为了尽量少造成多余的渲染,把这个主动权交由开发者自己来实现,适配更多场景,得到相对优秀的渲染性能

解决代码

javascript 复制代码
const onInOutTypeChange = (val) => {
    setInOutType(val);
    // 清除指定字段的规则
    form.setFieldsValue({ holderEmployeeCode: '' });
    handleValidateFields();
  };

  const handleValidateFields = () => {
    form
      .validateFields(['holderEmployeeCode'])
      .then((values) => {
        // 校验成功后的操作
        console.log('校验通过', values);
      })
      .catch((errorInfo) => {
        // 校验失败后的操作
        console.log('校验失败', errorInfo);
      });
  };
相关推荐
小贵子的博客3 天前
Ant Design Vue中 table组件设置分组表头和固定总结栏
vue.js·anti-design-vue
赢乐18 天前
前端vue表格el-table或a-table合并行的功能实现
elementui·el-table·element-plus·anti-design-vue·a-table·vue前端·表格合并行
RuoyiOffice23 天前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
无名咸鱼2 个月前
官网适配移动端与 PC 端实战遇到的问题总结
anti-design-vue
小杨同学呀呀呀呀2 个月前
Ant Design Vue <a-timeline>时间轴组件失效解决方案
前端·javascript·vue.js·typescript·anti-design-vue
编程猪猪侠3 个月前
Vue3 + Ant Design Vue 实现 Table 表格嵌套 Radio 单选框
javascript·vue.js·anti-design-vue
小贵子的博客3 个月前
Ant Design Vue <a-table>
前端·javascript·vue.js·anti-design-vue
Sun_小杰杰哇3 个月前
Dayjs常用操作使用
开发语言·前端·javascript·typescript·vue·reactjs·anti-design-vue
licongmingli4 个月前
vue2 基于虚拟dom的下拉选择框,保证大数据不卡顿,仿antd功能和样式
大数据·前端·javascript·vue.js·anti-design-vue
暴富的Tdy4 个月前
【使用 Vue2 脚手架创建项目并实现主题切换功能涵盖Ant-Design-Vue2/Element-UI】
vue.js·elementui·anti-design-vue·vue切换主题