Vue3学习笔记(4)-Vue3中setup的两个注意点
setup的两个注意点:
setup
执行的时机- 在
beforeCreate
之前执行一次,this
是undefined
。
- 在
setup
的参数props
:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性。context
:上下文对象attrs
: 值为对象,包含:组件外部传递过来,但没有在props
配置中声明的属性, 相当于this.$attrs
。slots
: 收到的插槽内容, 相当于this.$slots
。*emit
: 分发自定义事件的函数, 相当于this.$emit
。
代码展示:
- 父组件
<template>
<Demo @hello="showHelloMsg" msg="你好啊" school="五邑大学">
<!-- 由于兼容性问题,Vue3中推荐使用v-slot来指定插槽 -->
<template v-slot:qwe>
<span>五邑大学</span>
</template>
<template v-slot:asd>
<span>五邑大学</span>
</template>
</Demo>
</template>
<script>
import Demo from './components/Demo'
export default {
name: 'App',
components:{Demo},
setup(){
// 自定义事件
function showHelloMsg(value){
console.log(`你好啊,你触发了hello事件,我收到的参数是:${value}!`)
}
return {
showHelloMsg
}
}
}
</script> - 子组件
<template>
<h1>一个人的信息</h1>
<h2>姓名:{{person.name}}</h2>
<h2>年龄:{{person.age}}</h2>
<button @click="test">测试触发一下Demo组件的Hello事件</button>
</template>
<script>
export default {
name: 'Demo',
props:['msg','school'],//这里生命接受父组件传过来的参数props
emits:['hello'],//这里声明接收父组件传过来的自定义事件
setup(props,context){
console.log('---setup---',props)//声明接收props
//这里的context相当于vuex中的context,里面饱含着一些你可能会用到的方法及属性
console.log('---setup---',context)
console.log('---setup---',context.attrs) //相当与Vue2中的$attrs
console.log('---setup---',context.emit) //触发自定义事件的。
console.log('---setup---',context.slots) //插槽
//数据
let person = reactive({
name:'张三',
age:18
})
//方法
function test(){
context.emit('hello',666)
}
//返回一个对象(常用)
return {
person,
test
}
}
}
</script>
结果展示:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库