在官方React documentation中,有人说可以为类型检查指定一个自定义验证器。
但是我下面的验证器的自定义实现从未执行,因此我无法弄清为什么。
在下面的示例中,应使用readr::parse_number(as.character(df$x))
#[1] 50000
来基于其参数的#来验证函数,例如,此处的“ onClick”函数需要1个单个arg。但是,funcWithArgs
从不执行。
funcWithArgs
我想念什么?
答案 0 :(得分:1)
funcWithArgs
正在执行。它返回一个错误,该错误未得到处理。将return new Error
替换为console.log
会在浏览器控制台中显示propName
消息,表明该函数正在被调用。
答案 1 :(得分:1)
最初,我认为这是因为您没有将参数标记为必需的,但是我发现它在任何情况下都对我有效。
但是作为一项学习练习,我也重新实现了它以支持.isRequired! 请原谅打字稿...
function funcWithArgs(argCount: number) {
function impl(this: any, props: any, propName: any, _componentName: any) {
const func = props[propName];
if (this?.isRequired || func !== undefined) {
if (typeof func !== 'function' || func.length !== argCount) {
return new Error(
`${propName} must be a function with ${argCount} number arguments`,
);
}
}
}
impl.isRequired = impl.bind({ isRequired: true })
return impl;
}
Component.proptypes = {
onClick: funcWithArgs(1).isRequired
}