基本用法
this.state
是组件内部产生的数据this.props
是从组件外面,通过属性传入到组件中的数据
<!DOCTYPE html>
<html lang="en">
<head>
<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>
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
</head>
<body>
<div id="app1"></div>
<div id="app2"></div>
<div id="app3"></div>
<script type="text/babel">
class Person extends React.Component {
render () {
const {name, sex, age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
}
ReactDOM.render(<Person name="jerry" age="19" sex="男"/>, document.getElementById('app1'))
ReactDOM.render(<Person name="tom" age="18" sex="女"/>, document.getElementById('app2'))
const person = {name: '老刘', age: '30', sex='女'}
ReactDOM.render(<Person {...person}/>, document.getElementById('app3'))
</script>
</body>
</html>
类型约束
<!DOCTYPE html>
<html lang="en">
<head>
<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>
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script src="../js/prop-types.js"></script>
</head>
<body>
<div id="app1"></div>
<div id="app2"></div>
<div id="app3"></div>
<script type="text/babel">
class Person extends React.Component {
render () {
const {name, sex, age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
}
Person.propTypes = {
name: PropTypes.string,
sex: PropTypes.string.isRequired,
method: PropTypes.func,
}
ReactDOM.render(<Person name="jerry" age="19" sex="男"/>, document.getElementById('app1'))
ReactDOM.render(<Person name="tom" age="18" sex="女"/>, document.getElementById('app2'))
ReactDOM.render(<Person name="老刘" age="30" sex="女"/>, document.getElementById('app3'))
</script>
</body>
</html>
默认值参数
<!DOCTYPE html>
<html lang="en">
<head>
<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>
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script src="../js/prop-types.js"></script>
</head>
<body>
<div id="app1"></div>
<div id="app2"></div>
<div id="app3"></div>
<script type="text/babel">
class Person extends React.Component {
render () {
const {name, sex, age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
}
Person.defaultProps = {
sex: "男",
age: "18"
}
ReactDOM.render(<Person name="jerry" age="19" sex="男"/>, document.getElementById('app1'))
ReactDOM.render(<Person name="tom" age="18" sex="女"/>, document.getElementById('app2'))
ReactDOM.render(<Person name="老刘" age="30" sex="女"/>, document.getElementById('app3'))
</script>
</body>
</html>
约束、默认值的简写
class Person extends React.Component {
render () {
const {name, sex, age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
static propTypes = {
name: PropTypes.string,
sex: PropTypes.string.isRequired,
method: PropTypes.func,
}
static defaultProps = {
sex: "男",
age: "18"
}
}
props是只读的
- 注意,
props
是只读的,不能够直接进行修改,例如:this.props.name='test'
,是会报错的 - 但如果传入的
props
属性是引用类型,this.props.obj.name='test'
,是可以修改成功的,但不要这样做,因为:
- 在组件内部修改传入的引用类型,会很混乱,很难确定是谁在修改数据
- 就算在组件内通过this.props修改了引用类型也不会触发视图更新,因此是无意义的
标签体的内容
- 标签体的内容,会作为
props
的 children
属性传入
构造器中的 props
class Person extends React.Component {
constructor (props) {
super(props)
console.log(this.props)
}
render () {
const {name, sex, age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
}
ReactDOM.render(<Person name="tom" age="18" sex="女"/>, document.getElementById('app'))
constructor (props) {
super(props)
console.log('constructor', this.props)
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021040211555554.png?type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RMMTgzODI5NTA0OTc=,size_16,color_FFFFFF,t_70)
constructor (props) {
super()
console.log('constructor', this.props)
console.log('constructor', props)
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210402115700312.png)
函数式组件中的props
function Person (props) {
const {name, sex, age} = props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
Person.propTypes = {
name: PropTypes.string,
sex: PropTypes.string.isRequired,
method: PropTypes.func,
}
Person.defaultProps = {
sex: "男",
age: "18"
}
ReactDOM.render(<Person name="tom" age="18" sex="女"/>, document.getElementById('app'))