我在反应组件中使用道具类型。该组件具有一托data
,其应该是这样的对象的数组:[{value: 'some string', id: 123}]
。我想添加一个自定义的 prop-type 函数,它使data
if props.useCustomSuggestions
is成为必需false
。我试过这样的事情:
data: (props) => {
if (!props.useCustomSuggestions && !props.data) {
return new Error('Data must be provided to use default suggestions');
} else if (props.data && typeof props.data !== 'object') {
return new Error(
'Data must be an array',
);
}
};
我相信这个工程验证,当阵列需要props.useCustomSuggestions
的false
,但它不请检查是否在对象data
的格式是否正确。是否有另一种编写方法来验证数组由具有value
字符串类型和id
数字类型属性的对象组成?
我认为react中的customArrayProp文档可能是解决方案,但它没有传递整个 props 对象,所以我失去了data
对useCustomSuggestions
.
有一种特殊的方法可以直接调用propTypes
check以重用其检查逻辑:PropTypes.checkPropTypes()
data: (props, propName, componentName) => {
if (props.useCustomSuggestion) { // data should be validated but is optional
PropTypes.checkPropTypes({
[propName]: PropTypes.arrayOf(
PropTypes.shape({
value: PropTypes.string.isRequired,
id: PropTypes.number.isRequired
})
)
},
props,
propName,
componentName
);
} else { // data is required
PropTypes.checkPropTypes({
[propName]: PropTypes.arrayOf(
PropTypes.shape({
value: PropTypes.string.isRequired,
id: PropTypes.number.isRequired
})
).isRequired
},
props,
propName,
componentName
);
}
}
PS出于未知原因,代码propTypes
和框有时会运行检查,有时会默默地跳过它,所以我的代码示例不是100%有效。但是我已经用string
/检查了方法number
- 就在我试图采用它时arrayOf
/shape
它开始变得奇怪。
可能您将能够将公共部分(shape
的内部)移动到 interterm 变量以减少代码重复,但正如我所说的无法确保。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句