antd表单校验---rules中的type校验

3,016 阅读1分钟

场景

在某项目开发过程中,为了防止数据越权问题,对主键进行了加密,这时候加密后的主键就变成了string类型。

rules: [
        {
          type: 'number',
          required: true,
          message: 'Not Null, please input a valid value!',
        },
      ],

上述代码中,typenumber,当我们要取主键作为这个表单的值时,如果未加密,那么校验是可以通过的,当加密时,主键的类型变成了string类型,此时的type: ''number就会导致类型校验不通过,会提示Not Null, please input a valid value!

如何兼容两种类型的校验?

AsyncValidator看了关于type的一些说明,其中看到一个type: 'any'

然后在antd官网的codesandbox尝试写了一下,发现报错了。

没找到具体原因,在其中一个issue上看到有一个transform的用法.

rules: [
        {
          type: 'string',
          required: true,
          message: 'Not Null, please input a valid value!',
          // FIXME: 添加transform,只会影响校验,不会影响原始值,都转化为string类型
          transform: (value) => {
            return String(value);
          },
        },
      ],

上述代码中,将type改写为string,并且添加transform,就能完美的兼容numberstring两种类型的校验。

总结

添加transform,只会影响校验,不会影响原始值,都转化为string类型