我有自定义Todo propType:
export const TodoPropType = PropTypes.shape({
title: PropTypes.string.isRequired,
description: PropTypes.string
})
我有这样的Todo收藏
{
"Kfd455gdf4gdf" : { // key as uid
title: "blabla",
description: "blobloblo"
},
"Kf65sd465fsd" : {
title: "blabla2",
description: "blobloblo2"
}
}
我想做一个自定义propType来验证集合并重用我的Todo propType
export const TodosPropType = function(props, propName, componentName) {
const todos = props[propName]
// ... valide that an object..
Object.keys(todos).map((qid) => {
// valide that the qid is a string
// reuse my TodoPropType
})
}
但不推荐使用PropType调用PropType。我收到了警告:
警告:您正在为
todos
上的TodoComponement
道具手动调用React.PropTypes验证函数。这已被弃用,并且在下一个主要版本的制作中不起作用....
你是如何处理的?
答案 0 :(得分:0)
不幸的是,在弃用时,您需要使用typeof stringToCheck === 'string'
并手动检查props.title
是否存在。如果缺少其中任何一项,您将使用new Error('error goes here')
我们的应用程序中有类似的东西,从不需要进行自定义验证,为什么你不能做这样的事情。
component.propTypes = {
todos: PropTypes.objectOf(TodoPropType)
}
这将告诉组件检查todos是否是一个数组,如果是,则数组的内容应该是给定的形状,如果有任何形状不匹配,那么它将引发错误。