如何指定proptypes以允许可空的,必需的prop值?

时间:2017-10-19 21:45:33

标签: javascript reactjs react-proptypes

对于我的项目,我们希望在组件道具中传递空值以指示未指定的值(如果你愿意,可以使用#34;已知的未知")。我们团队的惯例是以这种方式使用null。

通过组件propTypes定义,我想要为prop传递一个值,但是如果没有React prop类型验证发出警告,则允许它为null(未定义)。

所以要以i / o风格重申:

  • prop value = string / number / object / etc - >没有警告
  • prop value = null - >没有警告
  • prop value = undefined(显式或仅省略prop值赋值) - > 警告

如何实现这种行为?

一个想法是写一些替代.isRequired,比如.isDefined不会发出空值警告,但我不知道如何做到这一点而不用分叉或放弃类型库。

1 个答案:

答案 0 :(得分: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)
};