state状态只在class类组件才有,函数组件没有此功能
- 状态(state)即数据,是组件内部的私有数据,只能在组件内部使用
- state的值是对象,表示一个组件中可以有多个数据
- 通过this.state来获取状态
- state数据值可以修改 this.setState
- state可以定义在类的构造方法中也可以写在类的成员属性中
export default class extends React.Component {
constructor(props){
super(props)
// 第一种初始化方式
this.state = {
count : 0
}
}
/*
// 第二种初始化方式
state = {
count:1
}
*/
render(){
return (
<div>计数器 :{this.state.count}</div>
)
}
}
state中的值不能直接通过修改state中的值来进行修改数据操作,react提供一个this.setState方法来完成state数据的修改操作
import React, { Component } from 'react'
export default class CmpState extends Component {
// state组件内部使有的数据源
// 方案1 成员属性
/* state = {
username: '张三'
}
*/
constructor(props) {
super(props);
// 方案2 构造方法初始化state数据
this.state = {
// username: '李四'
username: this.props.username,
count: 100
}
}
render() {
return (
<div>
得到state中的数据为:{this.state.username}
<hr />
<h3>{this.state.count}</h3>
<button onClick={this.incr.bind(this)}>自增一下</button>
</div>
)
}
incr() {
// 更新数据的同时,更新ui显示
// 方案1 对象写法 不支持并发处理 同步修改
/* this.setState({
count: ++this.state.count
}) */
// 方案2 异步处理,支持并处理 ssf 官方推荐写法
/* this.setState((state) => {
return {
count: ++state.count
}
}) */
// 简写
this.setState((state) => ({
count: ++state.count
}))
}
}
props与state区别
- props 中存储的数据,都是外界传递到组件中的
- props 中的数据,都是只读的
- state 中的数据,都是可读可写的
- props 在函数声明或类申明的组件中都有
- state 只有类申明的组件中才有