React PropTypes - 如何使形状可选,其字段是否必需?

时间:2017-09-06 18:08:05

标签: reactjs react-proptypes

我有一个接收badge道具的组件(参见下面的示例)。徽章是可选的,但一旦使用,我希望它内部有一些必填字段。我尝试过以下方法:

Component.propTypes = {
  badge: PropTypes.shape({
    src: PropTypes.string.isRequired,
    alt: PropTypes.string.isRequired,
  }),
}

虽然有效,但我在Chrome上尝试使用没有徽章时会收到此警告:

  

警告:道具类型失败:道具badge.src被标记为必需   在Component中,但其值为null

这样做的正确方法是什么?

组件使用示例:

Barack Obama with flag badge={{ src: 'usa.png', alt: 'United States' }}

Barack Obama without flag badge未提供

1 个答案:

答案 0 :(得分:4)

执行此操作的正确方法。我非常感兴趣的是这不会起作用,所以我将它粘贴在CodePen(https://codepen.io/Oblosys/pen/xLvxrd)中,它的工作方式与预期的一样。 (打开控制台,取消注释失败的控制台以查看道具类型错误)

您的代码中必须出现其他问题,并且在某些时候您使用具有h = static_cast< test_classA * >(new test_classB); 的徽章属性对象呈现Handle。也许在来自api请求的数据到来之前?在Component及其父级的某些控制台日志记录中,您应该能够找到罪魁祸首。