学习目标: 掌握 props 中 children 属性的用法
children 属性是什么
表示该组件的子节点,只要组件内部有子组件节点,props 中就有该属性
children 可以是什么
学习目标: 掌握组件 props 的校验写法,增加组件的健壮性
对于组件来说,props 是由外部传入的,我们无法保证组件使用者传入什么格式的数据,如果传入的数据格式不对,就有可能导致组件内部错误,组件使用者可能报错了也不知道为什么 > 例:
const List = (props) => {
const arr = props.colors
const lis = arr.map((item, index) => <li key={index}>{item.name}</li>)
}
;<list colors={19} />
面对这样的问题,我们可以使用 props 校验解决
实现步骤:
yarn add prop-type
prop-types
包组件名。propTypes = {}
给组件添加校验规则import React from 'react'
import PropTypes from 'prop-types'
function Test({ list }) {
return (
<div>
{list.map((item) => (
<p key={item}>{item}</p>
))}
</div>
)
}
Test.propTypes = {
list: PropTypes.array,
}
class App extends React.Component {
state = {}
render() {
return (
<>
<Test list={[1, 2, 3]} />
</>
)
}
}
export default App
学习目标: 掌握 props 常见的校验规则
四种常见结构:
//常见类型
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
//必填
optionalFunc : PropTypes.func.isRequired
//特定结构对象
optionalobjectwithShape: PropTypes.shape({
color:PropTypes.string,
fontSize:PropTypes.number
})
官方文档地址:https://reactjs.org/docs/typechecking-with-proptypes.html
学习目标: 掌握如何给组件的 props 设置默认值
通过
defaultProps
可以给组件的 Props 设置默认值,在为传入 props 的时候生效
1.函数组件
import React from 'react'
//导入defaultprops
import PropTypes from 'prop-types'
function Test({ list }) {
return (
<div>
{list.map((item) => (
<p key={item}>{item}</p>
))}
</div>
)
}
//设置默认值
Test.defaultProps = {
list: [1, 2, 3], //如果传入list,就以传入的list为主,如果不传入list就默认list为[1,2,3]
}
class App extends React.Component {
render() {
return (
<>
<Test />
</>
)
}
}
export default App
function Test({ list = [1, 2, 3] }) {
return (
<div>
{list.map((item) => (
<p key={item}>{item}</p>
))}
</div>
)
}
2.类组件
import React from 'react'
import PropTypes from 'prop-types'
class Test extends React.Component {
render() {
return <div>{this.props.list}</div>
}
}
Test.defaultProps = {
list: [1, 2, 3],
}
class App extends React.Component {
render() {
return (
<>
<Test />
<Test list={[4, 5, 6]} />
</>
)
}
}
export default App
import React from 'react'
import PropTypes from 'prop-types'
class Test extends React.Component {
static defaultProps = {
list: [4, 5, 6],
}
render() {
return <div>{this.props.list}</div>
}
}
class App extends React.Component {
render() {
return (
<>
<Test />
<Test list={[1,2,3]}>
</>
)
}
}
export default App