setState是react同步更新视图的API方法,前面说过,react是一个专注于视图层的轻量级库,所以我们每当状态更新之后,视图都不会同步最新的状态,这个时候我们就需要手动的更新一下视图。同步视图的方法API为setState。
setState第一个参数可以传递一个对象
import React, { Component } from 'react'
export default class Test extends Component {
constructor(){
super()
this.state={
doing:"学习"
}
}
changeDoing = air => {
this.setState({
doing:air
})
}
render() {
return (
<div>
我是test组件======》{this.state.doing}
<button onClick={this.changeDoing.bind(this,"打飞机")}>点击改变doing</button>
</div>
)
}
}
setState第一个参数可以传递一个函数
- 函数里面有两个参数(prevSate,props),prevSate是上一个状态,父组件的props
changeDoing = (air) => {
console.log(air) //打飞机
this.setState((prevSate,props) =>{
console.log("prevSate",prevSate,"props",props) //prevSate {doing: "学习"} props {}
return{
doing:air
}
})
}
setState第二个参数输一个回调函数
- setState是异步的,所以想要获取到最新的state,没有办法获取,就有了第二个参数,这是一个可选的回调函数
changeDoing = (air) => {
this.setState((prevSate,props) =>{
return{
doing:air
}
},() => {
console.log("回调函数里拿到最新的状态",this.state.doing) //控制台:回调函数里拿到最新的状态 打飞机
})
console.log("setState函数外部拿状态",this.state.doing) //setState函数外部拿状态 学习
}