嵌套的 PropType 是否需要 isRequired?

Is isRequired necessary for nested PropTypes?

假设我定义了这个 PropType:

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

如果该数据结构是必需的,那么 isRequired 属性是否对于该嵌套结构的每一层都是必需的,或者末尾的顶级 isRequired 是否包含内部的所有内容?

顶层isRequired只检查是否提供了complicatedData并且是一个数组。您可以给它一个包含空对象的数组,例如 [{}, {}],它会根据您的代码通过测试。

如果你想让数组complicatedData中的每个元素都有一个name属性,那么你需要这样写:

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

如果您希望每个元素都有一个 data 属性.

,则相同