React PropTypes arrayOf oneOf形状A或形状B.

时间:2017-03-30 18:07:49

标签: reactjs react-proptypes

我试图在oneOf()中嵌套shape() arrayOf()的列表,但我收到错误。

  

警告:道具类型失败:提供给tabs[0]的值为[object Object]的道具MyComponent无效,预期为[null,null]之一。

是否可以通过oneOf() shape()列表?

tabs: React.PropTypes.arrayOf(
  React.PropTypes.oneOf([
    React.PropTypes.shape({
      id: React.PropTypes.string.isRequired,
      content: React.PropTypes.node.isRequired,
    }),
    React.PropTypes.shape({
      id: React.PropTypes.string.isRequired,
      params: React.PropTypes.object.isRequired,
    }),
  ]),
),

更新!找到answer here,看起来我应该使用OneofType。

tabs: React.PropTypes.arrayOf(
  React.PropTypes.oneOfType([
    React.PropTypes.shape({
      id: React.PropTypes.string.isRequired,
      content: React.PropTypes.node.isRequired,
    }),
    React.PropTypes.shape({
      id: React.PropTypes.string.isRequired,
      params: React.PropTypes.object.isRequired,
    }),
  ]),
),

1 个答案:

答案 0 :(得分:7)

我决定将这个问题的更新发布为答案。

我找到了答案here。我应该使用OneofType。

tabs: React.PropTypes.arrayOf(
  React.PropTypes.oneOfType([
    React.PropTypes.shape({
      id: React.PropTypes.string.isRequired,
      content: React.PropTypes.node.isRequired,
    }),
    React.PropTypes.shape({
      id: React.PropTypes.string.isRequired,
      params: React.PropTypes.object.isRequired,
    }),
  ]),
),