onRenderTracked() 状态跟踪
onRenderTracked
直译过来就是状态跟踪,他会跟踪页面上所有的方法跟变量,也就是我们return
返回的属性与方法,它都会进行跟踪。当页面有update
时,会生成一个event
对象。我们可以通过这个event
对象查看程序的问题所在。
看一下代码
注意使用了同样需要按需引入
<template>
<div class="life">
{{ num }}
<button @click="addNum">加1</button>
</div>
</template>
<script lang="ts">
import {
defineComponent,
reactive,
toRefs,
onRenderTracked,
} from "vue";
export default defineComponent({
name: "Life",
components: {},
setup() {
const data = reactive({
num: 1,
addNum: () => {
data.num++;
},
});
onRenderTracked((event) => {
console.log(event);
});
const refData = toRefs(data);
return {
...refData,
};
},
});
</script>
<style lang="scss">
.life {
margin-top: 40px;
}
</style>
刷新浏览器后,浏览器打印出
可以看到属性key
,对应的就是num
这个属性名
## onRenderTriggered() 状态触发
onRenderTriggered
直译过来是状态触发,它不会跟踪每一个值,而是给你变化值的信息,并且新值和旧值都会给你明确的展示出来。
使用它同样要先用import进行引入
<template>
<div class="life">
{{ num }}
<button @click="addNum">加1</button>
</div>
</template>
<script lang="ts">
import {
defineComponent,
reactive,
toRefs,
onRenderTriggered,
} from "vue";
export default defineComponent({
name: "Life",
components: {},
setup() {
const data = reactive({
num: 1,
addNum: () => {
data.num++;
},
});
onRenderTriggered((event) => {
console.log(event);
});
const refData = toRefs(data);
return {
...refData,
};
},
});
</script>
<style lang="scss">
.life {
margin-top: 40px;
}
</style>
但我们点击
+1
后,查看浏览器控制台,可以看到打印出它不会跟踪每一个值,而是给你变化值的信息,并且新值
newValue
和旧值oldValue
都会给你明确的展示出来。主要的属性介绍
- key 那边变量发生了变化
- newValue 更新后变量的值
- oldValue 更新前变量的值
- target 目前页面中的响应变量和函数
总结: 通过这些你能很好的对代码进行调试。这些调试用的钩子函数,如果你能正确合理的使用,是真的可以快速解决问题的。