美文网首页
React 路上的小问题

React 路上的小问题

作者: 史梦辰 | 来源:发表于2018-12-19 14:35 被阅读0次

    1.setState的异步更新和i++

    问题重现:
    想实现一个点赞按钮,点击一次赞增加一次,用likes变量来保存赞的数目
    当我使用i++在setState中自增时发现并不可以


    image.png
    效果: image.png
    当我在控制台打印this.state.likes的值是,始终都是1
    image.png
    这就涉及到了setState的异步更新
    解析:

    likes:this.state.likes++
    是先赋值再运算
    先赋值likes=0
    再运算this.state.likes=1
    所以控制台里打印的this.state.likes=1,为什么一直是1呢,因为this.setState是异步更新的,setState只是把要修改的状态放在一个队列中,处于性能原因,可能会将setState的状态修改合并成一次修改,所以setState在最后又将this.state.likes的值更新为0,在下一次执行likes:this.state.likes++
    时likes还是0,所以不要依赖当前的state值,而在控制台打印this.state.likes会一直是1。
    setState是支持回调函数的

    this.setState({likes:this.state.likes++},()=>console.log(this.state.likes));
    

    这是控制台中就会一直打印0,可以看出setState是异步更新的。

    话题跑回来,为了实现这个点赞功能,只要改为likes:++this.state.likes就可以啦

    相关文章

      网友评论

          本文标题:React 路上的小问题

          本文链接:https://www.haomeiwen.com/subject/mekjkqtx.html