Javascript 嵌套的PropType是否需要isRequired?

Javascript 嵌套的PropType是否需要isRequired?,javascript,reactjs,react-proptypes,Javascript,Reactjs,React Proptypes,假设我定义了这个PropType: Component.propTypes = { complicatedData: PropTypes.arrayOf( PropTypes.shape({ name: PropTypes.string, data: PropTypes.arrayOf(PropTypes.number) }) ).isRequired, }; 如果该数据结构是必需的,那么该嵌套结构的每个级别是否都需要isRequired属性,或

假设我定义了这个PropType:

Component.propTypes = {
  complicatedData: PropTypes.arrayOf(
    PropTypes.shape({
      name: PropTypes.string,
      data: PropTypes.arrayOf(PropTypes.number)
    })
  ).isRequired,
};

如果该数据结构是必需的,那么该嵌套结构的每个级别是否都需要
isRequired
属性,或者最后的顶级
isRequired
是否包含内部的所有内容?

顶级
isRequired
仅检查是否提供了
复杂数据且是一个数组。您可以给它一个包含空对象的数组,例如
[{},{}]
,它将通过基于您的代码的测试

如果希望数组中的每个元素
使数据复杂化
具有
名称
属性,则需要编写:

Component.propTypes = {
  complicatedData: PropTypes.arrayOf(
    PropTypes.shape({
      name: PropTypes.string.isRequired,
      data: PropTypes.arrayOf(PropTypes.number)
    })
  ).isRequired,
};

如果希望每个元素都有
数据
属性,则相同。

顶层
需要
仅检查是否提供了
复杂数据
,并且是数组。您可以给它一个包含空对象的数组,例如
[{},{}]
,它将通过基于您的代码的测试

如果希望数组中的每个元素
使数据复杂化
具有
名称
属性,则需要编写:

Component.propTypes = {
  complicatedData: PropTypes.arrayOf(
    PropTypes.shape({
      name: PropTypes.string.isRequired,
      data: PropTypes.arrayOf(PropTypes.number)
    })
  ).isRequired,
};

如果您希望每个元素都有一个
data
属性,则相同。

为什么不先尝试一下呢?这一点很好。我的档案里没有我可以停下来试试的地方。但是问有什么害处呢?当然没有害处。但是你可以在8分钟前得到答案\_(ツ)_/“”
Ha true,但我正在重构的文件都搞砸了,肯定不会在当前状态下运行。另外,如果有人知道“为什么”和“什么”的话这将帮助我更好地理解这篇文章。你为什么不先试一下呢?很好。我的文件中没有一个地方可以停下来试一下。但是问有什么害处?当然没有害处。但是你可以在8分钟前得到答案。
\_(ツ)_/“”
Ha true,但我正在重构的文件都搞砸了,肯定不会在当前状态下运行。另外,如果有人知道“为什么”和“什么”的话它将帮助我更好地理解这段代码。因此,顶级isRequired是否也确保顶级数组包含对象,或者
isRequired
是否也需要
PropTypes.shape()
?我认为
shape()不需要
isRequired
arrayOf
的逻辑只是确保
complementddata
是一个数组。作为一个空数组是可以的。在大多数现实世界的用例中(例如,加载注释数组),数组可能是空的。因此根据我的经验,我从未在
shape()中添加
isRequired
@kylesimonds您必须使用
PropTypes.shape(…).isRequired
,否则它将接受
compleddata:[null]
那么,顶级isRequired是否也确保顶级数组包含对象,或者
PropTypes.shape()上也需要
isRequired
?我认为
shape()
不需要
isRequired
,数组可能是空的。因此根据我的经验,我从未将
isRequired
添加到
shape()