基本使用
state 是组件自身的一个状态,组件内部自己的数据。
组件的加载流程(组件的生命周期函数)
首先 执行组件的构造器 constructor() 处理组件内部的状态
其次 执行 render() 得到一个虚拟DOM
最后 执行 componentDIdMount() 插入我们的真实DOM
类组建
class App extends React.Component {
constructor(){
super()
//添加state状态
this.state = {
name:"mashibing"
}
}
render(){
return <div>
<span>{this.state.name}</span>
</div>
}
}
ReactDOM.render(<App/>,document.getElementById("app"))
函数组建
函数组件不能直接添加state属性 使用 Hooks
state的注意
-
state 是组件内部的数据状态
-
读取state状态 直接使用 this.state
-
更改state 需要使用 this.setSate()
-
this.setSate() 它是异步的
-
class App extends React.Component{
constructor(){
super()
this.click = this.click.bind(this)
this.state = {
name:'张三'
}
}
click(){
this.setState({
name:'李四'
})
}
render(){
console.log(this)
return <div>
<h1>{this.state.name}</h1>
<button onClick = {this.click}> 点击修改state</button>
</div>
}
}
ReactDOM.render(<App/>,document.getElementById('app'))
数据双向绑定
组件内部的state状态发生改变,更新视图中元素的状态,视图中元素的状态发生改变也会影响组件中state的状态。
input 表单演示数据双向绑定
class App extends React.Component{
constructor(){
super()
this.change = this.change.bind(this)
this.state = {
name:'张三'
}
}
change(event){
this.setState({
name:event.target.value
})
}
render(){
return <div>
<span>{this.state.name}</span>
<div>
<input type="text" onChange = {this.change} value={this.state.name} />
</div>
</div>
}
}
ReactDOM.render(<App/>,document.getElementById('app'))