Javascript 嵌套的PropType是否需要isRequired?
假设我定义了这个PropType: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属性,或
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()