计算属性
vue3计算属性有简写和完整写法
简写:
const list = reactive({
xing: '张',
ming: '三'
});
//计算属性的简写形式 没有考虑被修改
list.quanming = computed(() => {
return list.xing + '-' + list.ming;
});
完整写法:
//计算属性的完整写法
list.quanming = computed({
get() {
return list.xing + '-' + list.ming;
},
set(value) {
let arr = value.split('-');
list.xing = arr[0];
list.ming = arr[1];
}
});
watch 监听
watch可以接收3个参数,第一个是监听变量(监听多个的时候可以是数组),第二个参数是变化的时候执行的操作,第三个参数是初始化是否监听或者是否开启深度监听
watch监听一个变量
watch(
num,
(newvalue, oldvalue) => {
console.log('num变化啦', newvalue, oldvalue);
},
{ immediate: true }
);
watch监听多个变量(当监听多个变量的时候 newvalue和 oldvalue就会变成数组 newvalue里面存放监听变量的最新值 oldvalue存放变量改变之前的值)
watch([num, msg], (newvalue, oldvalue) => {
console.log('num或者msg变化啦', newvalue, oldvalue);
});
watch监听reactive定义的变量 无法正确获取oldvalue的值 强制开启了深度监听
watch监听reactive定义的响应式数据中的某一个属性(watch的第一个参数需要写成一个函数返回)
watch(
() => pasen.name,
(newvulue, oldvualue) => {
console.log('pasen.name变化啦', newvulue, oldvualue);
}
);
wactch监听reactive定义的响应式数据中的多个属性
watch([() => pasen.name, () => pasen.age], (newvua, oldvul) => {
console.log('pasen.name或者pasen.age变化啦', newvua, oldvul);
});
wactch监听reactive定义的响应式数据中的对象 需要开启深度监听
wactch监听ref定义的响应式数据 直接开启deep深度监听即可
watch(
() => pasen.txt,
(newvulue, oldvulue) => {
console.log('pasen.txt变化', newvulue, oldvulue);
},
{ deep: true } //此时deep配置是有效的
);
生命周期
vue2中的生命周期的写法在vue3中也是可以的使用的,在vue3中生命周期的beforeDestroy和destroyed这2个销毁的钩子该成了beforeUnmount和unmounted
vue3我们使用的事组合式api 我们的生命周期可以写在setup里面 生命周期的前面需要加on,我们还要注意再setup里面是没有beforeCreate和created这2个钩子的,setup的执行是再beforeCreate和created前面
import {
onBeforeMount,
onMounted,
onBeforeUpdate,
onUpdated,
onBeforeUnmount,
onUnmounted
} from 'vue';
setup() {
console.log('---setup---');
onBeforeMount(() => {
console.log('---onbeforeMount---');
});
onMounted(() => {
console.log('---onMounted---');
});
onBeforeUpdate(() => {
console.log('---onBeforeUpdate---');
});
onUpdated(() => {
console.log('---onUpdated---');
});
onBeforeUnmount(() => {
console.log('---onBeforeUnmount---');
});
onUnmounted(() => {
console.log('---onUnmounted---');
});
setup参数
setup可以接收2个参数 第一个参数是父组件传过来的值,当前组件需要和vue2一样接收,不然会提示警告 第2个参数可以进行插槽和子组件给父组件传值 注意:vue3子组件给父组件传值得时候,我们需要emits里面声明,不然会提示警告
props: ['msg', 'num'],
emits: ['hello'],
setup(props, context) {
console.log(context.slots.qwe);
//子组件给父组件传值
function test() {
context.emit('hello', 888);
}
return {
test
};