一,Watch和WatchEffect使用方法
类似于之前的Watch监听,推荐watch监听
1、watch和watchEffect都懒执行副作用,不过watchEffect比较频繁,在vue组件更新之前执行; 2、watch更具体地说明什么状态应该触发侦听器重新运行,watchEffect就没有这么友好; 3、watch访问侦听状态变化前后的值。
<template>
<p>{{ count }}</p>
<p>{{ originData.count }} {{ originData.user.name }}</p>
<button @click="incriment">点击我count增加</button>
</template>
<script setup lang="ts">
import { ref, reactive, watchEffect, watch } from "vue";
// data
const count = ref(0);
const user = reactive({ name: "张三" });
const arr = reactive([1, 2, 3, 4]);
const originData = reactive({
count: 0,
user: {
name: "张三",
},
arr: [1, 2, 3, 4],
});
// props
// emit
// methods
const incriment = () => {
console.log(originData.user);
originData.count++;
count.value++;
originData.user.name = "李四";
};
//watch
watch(
[count, originData.user],
(newVals, oldVals) => {
console.log("newVals", newVals);
console.log("oldVals", oldVals);
},
{
deep: true,
immediate: true,
}
);
// defineExpose
</script>
二,在setup中的生命周期钩子
因为 setup
是围绕 beforeCreate
和 created
生命周期钩子运行的,所以不需要显式地定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup
函数中编写。
选项式 API | Hook inside setup |
---|---|
beforeCreate | Not needed* 不需要 |
created | Not needed* 不需要 |
beforeMount | onBeforeMount 挂载之前 |
mounted | onMounted 页面加载完成时执行 |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeUnmount | onBeforeUnmount |
unmounted | onUnmounted 页面销毁时执行 |
errorCaptured | onErrorCaptured |
renderTracked | onRenderTracked |
renderTriggered | onRenderTriggered |
activated | onActivated |
deactivated | onDeactivated |
import { onMounted, onActivated, onUnmounted, onUpdated, onDeactivated } from "vue";
// 生命周期
onMounted(() => {
console.log("组件挂载");
});
onUnmounted(() => {
console.log("组件卸载");
});
onUpdated(() => {
console.log("组件更新");
});
onActivated(() => {
console.log("keepAlive 组件 激活");
});
onDeactivated(() => {
console.log("keepAlive 组件 非激活");
});