setState()的异步更新和第二个参数

我们用setState({})去更新状态时,发现更新后拿到的状态不是最新的,还是更新前的,所以setState是异步更新的,那么怎么拿到更新之后的state再次进行setState呢?

state = {
    count: 1
}
this.setState({
    count: this.state.count + 1

})
this.setState({
    count: this.state.count + 1
})
// 上面这种方式执行两次后count的值仍然是2,因为是异步更新的,界面渲染也只会合并多次setState只执行一次渲染

// 解决方法(也是setState的推荐写法):
this.setState((state, props)=>{
    return {
        count: state.count + 1
    }
})
this.setState((state, props)=>{
    return {
        count: state.count + 1
    }
})
// 使用回调函数的形式进行更新每次拿到的state才是最新的state,但是setState仍然是异步更新的

除此之外我们经常想在状态更新页面完成渲染后立即做一些事情,那么这时我们就要用到setState的第二个参数

this.setState((state, props) => {
    return {
        title: '我是页面标题'
    }
},()=>{
    // 此时状态已更新,页面也完成了更新后的渲染
    document.title = this.state.title;
})
// 这里就实现了更新状态后立马将状态设置成页面的title,第二个参数回调里我们就可以在状态更新后立马做一些事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值