setup中的细节与计算属性computed 与watch

88 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

setup返回值

//setup中的返回值是一个对象,内部的属性和方法是给html模板使用的

//setup中的对象中的属性和data函数中的对象中的属性会合并为组件对象的属性 methods会合并为组件的方法

//不要混合使用setuo与data和methods

//不能是async函数,因为返回值不再是return出去的对象,而是promise

 

setup参数

setup(props, {attrs,slots,emit}) {}

 

props参数: 是一个对象,里面有父组件向子组件传递的数据,,子组件使用props接受所有的属性

//包含props配置声明,且传入了所有属性的对象

 

context对象

attrs对象 获取当前组件标签上的属性, 该属性是在props中没有声明的接受的所有属性的对象

emit方法, 分发事件的

slots对象 插槽

 

ref-reactive比较

用ref处理对象或数组,内部会自动将对象/数组转换为reactive

ref内部: 通过给value属性添加getter/setter来实现对对象内部所有数据的劫持

reactive内部: 通过使用proxy来实现对对象内部所有数据的劫持,并通过Reflect操作对象内部数据

ref的数据操作: 在js中要 .value, 在模板中不需要(内部解析模板时会自动添加value)

ref中如果放入的是一个对象,那么是经过了reactive的处理,形成了一个Proxy类型的对象

 

计算属性computed

计算属性中的函数如果只传入一个回调函数表示的是get

//1.返回的是一个Ref类型的数据

const fullName = computed(() => {

return user.firstName + '_' + user.lastName

})

 

2.const fullName = computed({

get() {

return user.firstName + '_' + user.lastName

},

set(val: string) {

const names = val.split('_');

user.firstName = names[0];

user.lastName = name[1];

}

})

监视watch

const fullName = ref('');

watch(user, ({ firstName, lastName}) => {

fullName.value = firstName + '_' + lastName

},{immediate: true, deep: true})

//immediate 默认会执行一次watch, deep深度监视

  //监视多个数据 监视非响应式的数据的时候

watch([() => user.firstName, () => user.lastName, fullName], () => {

})