账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于 Vue 源码中 flushSchedulerQueue 和 nextTick 执行顺序的问题
    49
    0

    先看下代码示例:

    <template>
      <div ref="box">{{content}}</div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          content: 'before'
        }
      },
      mounted() {
        this.nextTick(() => {
          console.log(this.$refs.box.innerHTML) // after
        })
        this.content = 'after'
        this.nextTick(() => {
          console.log(this.$refs.box.innerHTML) // after
        })
      }
    }
    </script>

    这两天又重新看了下 Vue 的源码,nextTick(cb)会把cb push到callbacks中,而 this.content = 'after'也会把依赖content的watcher的执行函数flushSchedulerQueue push到callbacks中,接下来在同步代码执行完毕后一并flushCallbacks。这样说的话例子中第一个console.log(this.$refs.box.innerHTML)执行的时候content并未更新啊,为什么输出after呢?


    更新一下,我通过script标签引入Vue的话,则输出是before和after,但如果通过webpack构建运行的话,则输出都是after,费解。。。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部