1.更新数据
- setState()是异步更新数据的
- 注意:使用该语法时,后面的setState()不要依赖于前面的setState()
- 可以多次调用setState(),只会触发一次重新渲染
class App extends React.Component{
state = {
count:0
}
handleClick = ()=>{
//异步更新数据
this.setState({
count:this.state.count+1
})
this.setState({
count:this.state.count+1
})
console.log('count:',this.state.count)
}
render(){
return(
<div>
<h1>计数器:{this.state.count}</h1>
<button onClick={this.handleClick}>+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,
document.getElementById('root'))
2.1推荐语法
- 推荐:使用setState((state,props)=>{})
- 参数state:表示最新的state
- 参数props:表示最新的props
class App extends React.Component{
state = {
count:0
}
handleClick = ()=>{
// 异步更新数据
this.setState((state,props)=>{
return{
count:state.count+1
}
})
this.setState((state,props)=>{//得到最新的state,即上一次的state
console.log('第二次调用:',state)
return{
count:state.count+1
}
})
console.log('count:',this.state.count)
}
render(){
return(
<div>
<h1 id='title'>计数器:{this.state.count}</h1>
<button onClick={this.handleClick}>+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,
document.getElementById('root'))
2.2第二个参数
场景:在状态更新(页面完成重新渲染)后立即执行某个操作
语法:setState(update,[callback])
class App extends React.Component{
state = {
count:0
}
handleClick = ()=>{
// 异步更新数据
this.setState((state,props)=>{
return{
count:state.count+1
}}, ()=>{
console.log('这个回调函数会在状态更新后立即执行')
console.log('状态更新:',this.state.count)
console.log(document.getElementById('title').innerHTML)
}
)
console.log('count:',this.state.count)
}
render(){
return(
<div>
<h1 id='title'>计数器:{this.state.count}</h1>
<button onClick={this.handleClick}>+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,
document.getElementById('root'))