$nextTick与赋值操作=的优先级

先有两个例子:

例子1:

基于vue2.x版本

COPY
1
2
3
4
<div id="app">
<span id="demo">{{num}}<span>
<button @click="onClick">累加</button>
</div>
COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var app = new Vue({
el: '#app',
data() {
return {
a: 1
}
},
mounted() {
this.$nextTick(()=>{
// 输出 ?
console.log(document.getElementById('test').innerHTML);
})
// a == 2
this.a = ++;
},
methods: {
onClick() {
this.$nextTick(()=>{
// 输出 ?
console.log(document.getElementById('test').innerHTML);
})
// a == 3
this.a = ++;
}
}
});

上述代码分别输出1,2,你猜对了吗
页面初始化时,dom显示为2,输出1
点击事件之后,dom显示为3,输出为2

例子2:

基于vue3.x版本

COPY
1
2
3
4
<template>
<p id="demo">{{ a }}</p>
<button @click="onClick">累加</button>
</template>
COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script setup>

import { ref, nextTick, onMounted } from 'vue';

let a = ref(1);
onMounted(()=>{
nextTick(() => {
// 输出 ?
console.log(document.getElementById('demo').innerHTML);
});
// a == 2
a.value ++;
});
function onClick() {
nextTick(() => {
// 输出 ?
console.log(document.getElementById('demo').innerHTML);
});
// a == 3
a.value ++;
}
</script>

上述代码分别输出1,2,你猜对了吗
页面初始化时,dom显示为2,输出2
点击事件之后,dom显示为3,输出为2

可以看出来,对于初始化完成之后的事件,vue 2、3版本的输出与显示是相处的。
对于初始化时的处理,vue2 中nextTick优先于赋值操作,vue3 中赋值操作优先于nextTick

具体原因是为什么呢?

作者: 果汁
文章链接: https://guozhigq.github.io/post/d6fb0369.html
版权声明: All posts on this blog are licensed under the CC BY-NC-SA 4.0 license unless otherwise stated. Please cite 果汁来一杯 !