【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);
      });
  };
相关推荐
琹箐2 天前
ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
前端·javascript·anti-design-vue
曲辒净2 个月前
实现基于Vue的后台管理系统权限控制与动态路由
服务器·前端·vue.js·anti-design-vue
一川晚照人闲立4 个月前
JEECGBOOT前端VUE3版本浏览器兼容支持chrome>=76版本方法
java·前端·vue.js·chrome·anti-design-vue·jeecgboot·jeecg
南北极之间5 个月前
前端新手必看:10 大 UI 组件库全面解析,快速搭建高质量 Web 应用」 「从零开始:Vue 和 React 最受欢迎的 UI 组件库入门指南」 「超实用!PC 端和移动端 UI 组件库推荐与实战
前端·vue.js·ui·elementui·element·anti-design-vue·ui组件库
_Jyann_5 个月前
ant-design-vue的
vue.js·anti-design-vue
大王在路上5 个月前
Ant Design Vue --- select组件静态实现模糊搜索
前端·javascript·vue.js·anti-design-vue
高 朗5 个月前
【Vue】MacOS从0开始创建一个前端Vue项目并集成AntDesignVue
前端·vue.js·macos·anti-design-vue
GISer_Jing5 个月前
Ant Design中Flex布局、Grid布局和Layout布局详解
前端·css·前端框架·anti-design-vue
_Jyann_5 个月前
ant-design-vue
vue.js·anti-design-vue
来一碗刘肉面6 个月前
antdv-<a-table>的使用
前端·javascript·anti-design-vue