打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Vue3】setup的注意点及watch监视属性的六种情况
userphoto

2023.10.22 天津

关注

一,setup须知

1.1setup的执行时间

1.setup的执行时间要比beforCreate执行要早

export default {
name: 'Demo',
beforeCreate(){
console.log('beforeCreate已执行');
},
setup() {
console.log('setup已执行');
let person = reactive({
name: '小明',
age: 20,
});
return {
person,
};
},
};

1.2.steup参数

setup的参数
1.props: 值为对象,包含: 组件外部传递过来,且组件内部声明接收了的属性

2.context:上下文对象
①attrs:值为对象,包含: 组件外部传递过来,但没有在props配置中声明的属性,相当于 this.$attrs

  export default {
name: 'Demo',
props:['msg','age'],
setup(props) {
console.log(props);
let person = reactive({
name: '小明',
age: 20,
});
return {
person,
};
},
};

②slots: 收到的插槽内容,相当于 this.$slots

在App中定义插槽

<template v-slot:qwe>
<span>123</span>
</template>
<template v-slot:ewq>
<span>321</span>
</template>

在子组件中获取到插槽

 console.log(context.slots); // 得到插槽

③emit: 分发自定义事件的函数,相当于this.$emit

在App中写一个自定义事件并且传给组件

<Demo @hi='Hello' msg='山鱼' age=10>
</Demo>

  setup() {
function Hello(){
console.log('你好!');
}
return {
Hello
}
}

然后去到子组件使用context.comit获取到自定义事件

function point(){
context.emit('hi',666)
}
5TgxPT2v-1681788304084)]

```js
function point(){
context.emit('hi',666)
}

与Vue2中的computed配置功能一致

import { reactive,computed} from 'vue';
export default {
name: 'Demo',
setup() {
let person = reactive({
firstName: '小',
lastName: '明',
});
// 计算属性的简写形式,不考虑修改,是只读的
/*person.fullName= computed(()=>{
return person.firstName+'-'+person.lastName
}) */

// 计算属性的完整形式(可以读改)
person.fullName= computed({
get(){
return person.firstName +'-'+person.lastName
},
set(value){
const arr = value.split('-')
person.firstName = arr[0]
person.lastName = arr[1]
}
})
return {
person,
};
},
};

二,watch监视属性

有两种watch,分别是单个属性数据监视,和多个属性数据监视

watch中的三个参数分别为,监视的对象,监视的函数,监视属性的配置

监视ref所定义的数据

①监视属性监视ref的一个响应式的值

watch(sum, (newvalue, oldvalue) => {
console.log('当前值为'+newvalue, '以前值为'+oldvalue);
});

②监视ref所定义的多个响应式数据

        watch([sum,msg], (newvalue, oldvalue) => {
console.log('当前值为'+newvalue, '以前值为'+oldvalue);
});

监视reactive所定义的数据

①监视reactive定义的数据的变化

使用reactive定义的数据无法使用watch正确的获取newValue
并且会强制开启深度监视

watch(person,(newValue, oldValue) => {
console.log('person变化了',newValue,oldValue)
})

②监视reactive所定义的响应式数据的某个属性

            watch(()=>person.name,(newValue,oldValue)=>{
console.log('person.name发生了变化',newValue,oldValue)
})

③监视reactive所定义的响应式数据的某些属性

watch([()=>{person.age},()=>{person.name}],(newValue,oldValue)=>{
console.log('person.name发生了变化',newValue,oldValue)
})

④特殊形况

注:该情况监视的是recative所定义的对象中的某个属性,所以deep可以开启

 watch(()=>person.job,(newValue,oldValue)=>{
console.log('person.name发生了变化',newValue,oldValue)
}, {deep: true})
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vue 实战问题-watch 数组或者对象
Angular.js中使用$watch监听模型变化
深究AngularJS——监听模型$watch
前端开发技术之Vue3 相关基础知识点的整理分享
Vue3.0 新特性以及使用变更总结(实际工作用到的)
Vue2和Vue3开发组件有什么区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服