如何指定 proptypes 以允许可为空的、必需的 prop 值?
How to specify proptypes to allow nullable, required prop value?
对于我的项目,希望在组件属性中传递 null 值以指示未指定的值("known unknown",如果你愿意的话)。这样使用 null 是我们团队的惯例。
通过组件 propTypes 定义,我想要求为 prop 传递一个值,但允许它为 null(不是未定义的),而 React prop 类型验证不会触发警告。
因此,以 i/o 风格重申:
- prop 值 = string/number/object/etc --> 无警告
- prop value = null --> 无警告
- prop value = undefined(显式或只是省略 prop 值赋值)--> warning
如何实现这种行为?
一个想法是写一些 .isRequired 的替代品,比如 .isDefined,它不会对空值发出警告,但我不知道如何在不分叉或放弃 prop-types 库的情况下做到这一点.
我不确定你是否能让它以可链接的方式工作(我已经考虑了大概两分钟),但也许你可以使用自定义验证器?
function allowNull(wrappedPropTypes) {
return (props, propName, ...rest) => {
if (props[propName] === null) return null;
return wrappedPropTypes(props, propName, ...rest);
}
}
MyComponent.propTypes = {
nullOrNumber: allowNull(PropTypes.number.isRequired)
};
对于我的项目,希望在组件属性中传递 null 值以指示未指定的值("known unknown",如果你愿意的话)。这样使用 null 是我们团队的惯例。
通过组件 propTypes 定义,我想要求为 prop 传递一个值,但允许它为 null(不是未定义的),而 React prop 类型验证不会触发警告。
因此,以 i/o 风格重申:
- prop 值 = string/number/object/etc --> 无警告
- prop value = null --> 无警告
- prop value = undefined(显式或只是省略 prop 值赋值)--> warning
如何实现这种行为?
一个想法是写一些 .isRequired 的替代品,比如 .isDefined,它不会对空值发出警告,但我不知道如何在不分叉或放弃 prop-types 库的情况下做到这一点.
我不确定你是否能让它以可链接的方式工作(我已经考虑了大概两分钟),但也许你可以使用自定义验证器?
function allowNull(wrappedPropTypes) {
return (props, propName, ...rest) => {
if (props[propName] === null) return null;
return wrappedPropTypes(props, propName, ...rest);
}
}
MyComponent.propTypes = {
nullOrNumber: allowNull(PropTypes.number.isRequired)
};