React PropTypes:必须至少提供这些道具之一

Rei*_*l-- 3 validation reactjs react-proptypes

假设我的组件有2个道具。

没有一个是必需的,本身,你可以同时提供,如果您想。但是您需要至少提供两个道具之一。

PropTypes是否支持此验证规则?

如果是严格的XOR怎么办?


注意:我并不是在说允许已知道具使用两种类型中的一种……这是我的理解PropTypes.oneOf(['News', 'Photos'])PropTypes.oneOfType([...types...])正在谈论。

Shu*_*tri 7

PropTypes允许提供自定义验证,您可以在其中编写自己的逻辑和自己的错误,例如

MyComponent.propTypes = {
  News: (props, propName, componentName) => {
    if (!props.News && !props.Photos) {
      return new Error(`One among News or Photos prop must be provided`);
    }
  },

  Photos: (props, propName, componentName) => {
    if (!props.News && !props.Photos) {
      return new Error(`One among News or Photos prop must be provided`);
    }
  },
}
Run Code Online (Sandbox Code Playgroud)

您可以添加更多逻辑来指定每个道具是哪种道具