在 vue 组件之中,我们通过 setup 函数来使用 组合式 API。
那么下面我们将分别从函数的:
-
调用时机
-
this 指向
-
函数参数
-
返回值
这四个方面来解析 setup
函数
setup
函数在创建组件之前被调用,所以在 setup
被执行时,组件实例并没有被创建。
因此在 setup 函数中,我们将 没有办法 获取到 this 。
我们来看下面的这一段代码:
// 模板
// 配置对象
对于 setup
函数来说,它接收两个参数,分别为:
-
props
-
context
props
通过 prop
传递过来的所有数据,我们都可以在这里进行接收。并且获取到的数据将保持响应性。
我们看下面的代码:
父组件:
// 模板
// 配置对象
子组件:
const componentB = {
props: {
title: {
type: String,
required: true
}
},
setup(props) {
console.log(props); // Proxy {title: “父组件传递过来的 title”}
console.log(props.title); // “父组件传递过来的 title”
},
template: `
`
}
context
context 是一个 JavaScript 对象,这个对象暴露了三个组件的属性,我们可以通过 解构 的方式来分别获取这三个属性
// setup(props, context) {
setup(props, { attrs, slots, emit }) {
// Attribute (非响应式对象) 非 props 数据
console.log(attrs)
// 插槽 (非响应式对象)
console.log(slots);
// 触发事件 (方法) === this.$emit
console.log(emit);
}
attrs: 它是绑定到组件中的 非 props 数据,并且是非响应式的。
slots: 是组件的插槽,同样也不是 响应式的。
emit: 是一个方法,相当于 vue2 中的 this.$emit 方法。
然后我们通过下面的代码,来看一下这三个属性的实际使用:
// 父组件
<component-b title=“父组件传递过来的 title” desc=“父组件传递过来的普通属性” @update=“onUpdate”>