场景
在某项目开发过程中,为了防止数据越权问题,对主键进行了加密,这时候加密后的主键就变成了string类型。
rules: [
{
type: 'number',
required: true,
message: 'Not Null, please input a valid value!',
},
],
上述代码中,type为number,当我们要取主键作为这个表单的值时,如果未加密,那么校验是可以通过的,当加密时,主键的类型变成了string类型,此时的type: ''number就会导致类型校验不通过,会提示Not Null, please input a valid value!。
如何兼容两种类型的校验?
在AsyncValidator看了关于type的一些说明,其中看到一个type: 'any'
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,就能完美的兼容number和string两种类型的校验。
总结
添加transform,只会影响校验,不会影响原始值,都转化为string类型