如何指定属性以允许可为空的必需属性值?

Eri*_*sen 6 javascript reactjs react-proptypes

对于我的项目,最好在组件属性中传递空值以指示未指定的值(如果愿意,则为“已知未知”)。按照这种方式使用null是我们团队的惯例。

通过组件propTypes定义,我想要求为prop传递一个值,但允许它为null(不是未定义),而无需React prop类型验证触发警告。

因此,以I / O风格重述一下:

  • 属性值=字符串/数字/对象/等->无警告
  • 属性值= null->无警告
  • 属性值=未定义(显式或仅省略属性值分配)-> 警告

如何完成此行为?

一种想法是编写.isRequired的替代方案,例如.isDefined,它不会对空值发出警告,但我不知道如何在不派生或放弃prop-types库的情况下执行此操作。

Ale*_*rra 5

我不确定您是否可以使它以可链接的方式工作(我考虑了大概两分钟),但是也许您可以使用自定义验证程序?

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)
};
Run Code Online (Sandbox Code Playgroud)