我为defaultValue prop使用了这个验证器(特定形状的array
:
defaultValue: PropTypes.arrayOf(PropTypes.shape({
key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
value: PropTypes.string.isRequired
}))
但是,现在defaultValue
也可以是string
类型。所以我正在尝试一个自定义验证器:
defaultValue: function (props, propName, componentName) {
if (typeof props[propName] === "string"){
} else if (props[propName] instanceof Array){
//how to add old functionality here?
} else {
return new Error(
`Invalid prop ${propName} supplied to ${componentName}. Validation failed`
)
}
}
我可以在自定义验证器中使用旧的PropTypes.arrayOf(....)
吗?我想将旧的验证添加到新的自定义验证器函数中。如果无法使用PropTypes
,如何使用自定义代码实现相同的功能?
如果只想将默认值设置为字符串或自定义类型,则可以将oneOfType与字符串一起使用,并且您的类型也可以使用。
PropTypes.oneOfType([
PropTypes.string,
PropTypes.arrayOf(PropTypes.shape({
key: PropTypes.oneOfType([PropTypes.string,
PropTypes.number]).isRequired,
value: PropTypes.string.isRequired}))
])