我正在接受一个egghead反应教程,其中导师试图在不使用prop-types api的情况下在函数组件上实现proptypes,这就是他如何做到的:
function SayHello(props){
return (
<div>
Hello {props.firstName} {props.lastName} !
</div>
)
}
SayHello.propTypes = {
firstName(props, propName, componentName) {
if (typeof props[propName] !== 'string') {
return new Error(`Hey, you should pass a string for ${propName} in ${componentName} but you passed a ${typeof props[propName]}`)
}
}
}
这可能是一个愚蠢的问题,但我真的无法理解这段代码是如何工作的,有人可以向我解释一下,如何调用firstName(props, propName, componentName)
而不会被调用,以及componentName
如何返回SayHello
?它是每个组件的默认属性吗?
来自react'prop-types'库的实际prop类型检查器(例如array
,bool
等)返回以下签名的功能
function validate(props, propName, componentName, location, propFullName, secret)
因此,反应库只是使用有关正在验证的当前组件的参数调用此函数。
如果您可以像导师那样编写自己的功能,那么它应该是一样的