手动更改DOM内容和通过虚拟DOM更新DOM内容哪个优先级高?

问题描述 投票:0回答:0

最近在研究Vue的nextTick,自己写了如下demo代码:

<html>
  <head>
    <script src="./vue.js"></script>
  </head>
  <body>
    <div id="root"></div>
  </body>
  <script>
    const vue = new Vue({
      el: '#root',
      template: '<div><div id="dom">{{msg}}</div><button @click="add">add</button></div>',
      data() {
        return {
          msg: 1
        }
      },
      watch: {
        msg(value) {
          console.log('msg>>>>>', value);
        }
      },
      methods: {
        add() {
          const dom = document.getElementById('dom');
          dom.textContent = '30'
          for(let i = 0; i < 3; i ++) {
            this.msg ++
          }
          this.$nextTick(() => {
            console.log('msg.content2>>>>>>', msg.textContent)
          })
        }
      }
    })
  </script>
</html>

结果真的让我很困惑。 正如我所料,点击添加按钮后,

dom.textContent = '30'
将dom元素的textConent更改为30。接下来的for循环,将
msg
添加到4,因为Vue将异步更新页面,我们无法在页面中看到最新的结果。在
this.$nextTick
之后,Vue会立即使用更新后的
msg
重新渲染dom元素,我们现在知道的是4。所以 dom 元素的 textContent 现在应该是 4,但它仍然是 30。为什么会这样?我哪里错了?

vue.js event-loop
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.