vue-$nextTick, 没有获取到DOM

问题说明

没有输出 labelList 更新后的所有 li 节点

<ul>
    <li v-for="label in labelList">{{label}}</li>
</ul>
<script>
    data:{labelList:[1,2,3]}
    mounted:{
     this.labelList = [2,3,4,5]
     this.$nextTick(()=>{
        // 输出li标签 => 三个li标签
      })
    }
</script>

解决办法

this.$nextTick(()=>{
    setTimeout(()=>{
        // 输出li标签 => 四个li标签
    },0)
})

原理解释

官网文档上写明在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM,也就是说

if(newList.length > oldList.length){
  because: 多出来的 li 标签不在 vue 监控范围内
  so: 输出不出来
}

也就是说: nextTick 是在 已有的DOM更新循环以后执行的,你新生成的 DOM 是新生成的,不是在原来的 DOM 上更新的

至于 setTimeout 以后就获取到想要的结果了,可能是因为异步同步之类的原因,目前知识储备不足,无法直白地解释,暂不写

PS: if( 储备到这些知识 && 想起来这个坑){补一补}