反应嵌套的自定义 propType
React nested custom propType
我有一个自定义 Todo propType :
export const TodoPropType = PropTypes.shape({
title: PropTypes.string.isRequired,
description: PropTypes.string
})
我的 collection Todo 是这样的
{
"Kfd455gdf4gdf" : { // key as uid
title: "blabla",
description: "blobloblo"
},
"Kf65sd465fsd" : {
title: "blabla2",
description: "blobloblo2"
}
}
我想做一个自定义 propType 来验证 collection 并重用我的 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。我收到警告:
Warning: You are manually calling a React.PropTypes validation function for the todos
prop on TodoComponement
. This is deprecated and will not work in production with the next major versi....
你是怎么处理的?
不幸的是,由于弃用,您需要使用 typeof stringToCheck === 'string'
并手动检查 props.title
是否存在。如果缺少其中任何一项,您将使用 new Error('error goes here')
手动 return 错误
我们的应用程序中有类似的东西,而且永远不必进行自定义验证,为什么你不能做这样的事情。
component.propTypes = {
todos: PropTypes.objectOf(TodoPropType)
}
这将告诉组件检查待办事项是否为数组,如果是,则数组的内容应为给定形状,如果有任何不匹配该形状,则会抛出错误。
我有一个自定义 Todo propType :
export const TodoPropType = PropTypes.shape({
title: PropTypes.string.isRequired,
description: PropTypes.string
})
我的 collection Todo 是这样的
{
"Kfd455gdf4gdf" : { // key as uid
title: "blabla",
description: "blobloblo"
},
"Kf65sd465fsd" : {
title: "blabla2",
description: "blobloblo2"
}
}
我想做一个自定义 propType 来验证 collection 并重用我的 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。我收到警告:
Warning: You are manually calling a React.PropTypes validation function for the
todos
prop onTodoComponement
. This is deprecated and will not work in production with the next major versi....
你是怎么处理的?
不幸的是,由于弃用,您需要使用 typeof stringToCheck === 'string'
并手动检查 props.title
是否存在。如果缺少其中任何一项,您将使用 new Error('error goes here')
我们的应用程序中有类似的东西,而且永远不必进行自定义验证,为什么你不能做这样的事情。
component.propTypes = {
todos: PropTypes.objectOf(TodoPropType)
}
这将告诉组件检查待办事项是否为数组,如果是,则数组的内容应为给定形状,如果有任何不匹配该形状,则会抛出错误。