反应道具类型:自定义验证器不触发

时间:2019-07-29 16:15:35

标签: javascript reactjs react-proptypes

在官方React documentation中,有人说可以为类型检查指定一个自定义验证器。


但是我下面的验证器的自定义实现从未执行,因此我无法弄清为什么。

在下面的示例中,应使用readr::parse_number(as.character(df$x)) #[1] 50000 来基于其参数的#来验证函数,例如,此处的“ onClick”函数需要1个单个arg。但是,funcWithArgs从不执行。

funcWithArgs

我想念什么?

2 个答案:

答案 0 :(得分:1)

funcWithArgs正在执行。它返回一个错误,该错误未得到处理。将return new Error替换为console.log会在浏览器控制台中显示propName消息,表明该函数正在被调用。

Code Sandbox

答案 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
}