昨天我们介绍完如何建立一个元件,今天就来介绍 PropTypes,让建立的元件更加的完整吧!
当我们在写元件的时候,会建议将 props 先定义好要接收什麽样的型别,而这样的好处是当别人要使用你写好的元件时,会比较清楚该传什麽样的东西进去,降低产生 bug 的机率。
延续昨天的 Message 元件,它会接收两个字串型别的 prop,但假设使用这个元件的人,忘记少传一个 prop,或是传入数字进来,如下:
const Message = ({ color, animal }) => {
return <div>{color} {animal}</div>
}
const element = (
<div className='container'>
<Message color={'Black'} />
<Message color={3} animal={'dog'} />
</div>
)
ReactDOM.render(element, document.getElementById('root'))
画面看起来都非常的正常,但这不是我们所希望看到的。至少我们期望,如果别人少传或乱传东西到这个元件,能够在 console 印出错误讯息,来让开发的人员注意到这个问题。
接下来就让我们来使用 propTypes 来改善我们的 Message 元件。
首先在 Message 元件上建立 propTypes 的属性物件,而这个物件的 key 就是你要定义型别验证的 prop,以上面的范例来说,两个 props 都要验证。
Message.propTypes = {
color: PropTypes.string,
animal: PropTypes.string
}
再来,我们的 value 要必须是一个 callback ,它会接收三个参数分别是 props、这个 prop 的名称以及元件名称。
const PropTypes = {
string(props, propName, componentName) {
const type = props[propName]
if (typeof type !== 'string') {
throw new Error(
`The ${componentName} component needs ${propName} prop to be type of 'string', but was passed a ${type} instead`
)
}
}
}
把这两段加进去後,再去看 console 就会出现我们所写的错误讯息啦!
在上面的范例中我们自己写了一个简单的型别验证,让我们可以检查传进来的 props 是不是符合预期的型别。但其实我们可以使用这个 prop-types 套件来帮助我们做检验。
<html lang="en">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id='root'></div>
<script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/@babel/[email protected]/babel.js"></script>
<script src="https://unpkg.com/[email protected]/prop-types.js"></script>
<script type='text/babel'>
const Message = ({ color, animal }) => {
return <div>{color} {animal}</div>
}
Message.propTypes = {
color: PropTypes.string,
animal: PropTypes.string
}
const element = (
<div className='container'>
<Message color={'Black'} />
<Message color={3} animal={'dog'} />
</div>
)
ReactDOM.render(element, document.getElementById('root'))
</script>
</body>
</html>
引入 prop-types 之後,就可以把我们前面写的 PropTypes 物件删掉了,然後刚好我们之前的命名跟套件使用的物件一样,所以会发现 console,依然会出现一个型别错误讯息,不过没有给 animal prop 却没有错误提示。
这个时候只要在 string 後面加上 isRequired,让它知道这个 prop 是必填
Message.propTypes = {
color: PropTypes.string.isRequired,
animal: PropTypes.string.isRequired
}
再看一下 console 就会出现两个错了
关於 prop-types 的套件使用,有兴趣的人可以到它的 Github 做深入的了解,
以上就是今天的内容了,有什麽问题都欢迎在下方留言。
>>: 30天打造品牌特色电商网站 Day.7 HTML基础
昨天讲完了linux的核心架构,今天就开始让我们认识重要的部分吧。 以下是三个名词,程序(progr...
我是今年刚毕业的新鲜人,选择了离家229公里远的工作, 连我自己都感到很意外,毕竟我是一个非常以家人...
Android 10以上就很简单,直接使用MediaStore抓到图片路径,然後送给图片剪裁就好 i...
A map is an unordered collection of key-value pair...
学习进度 资料结构 泛型 通配字元 Android Studio RecyclerView Recy...