• Vue---vue3的setup函数的使用


    setup注意点:

     setup的使用:

    1.setup 函数时,它将接受两个参数:(props、context(包含attrs、slots、emit))

    1. context包含三个参数,可通过解构方式写
    2. context该上下文对象是非响应式的,可以安全地解构:
    3. export default {
    4. setup(props, { attrs, slots, emit, expose }) {
    5. // Attribute(非响应式的对象,等价于 $attrs)
    6. console.log(attrs)
    7. // 插槽(非响应式的对象,等价于 $slots)
    8. console.log(slots)
    9. // 触发事件(函数,等价于 $emit)
    10. console.log(emit)
    11. // 暴露公共 property(函数)
    12. console.log(expose)
    13. }
    14. }

    2.setup函数执行时机是在beforeCreated和created两个周期函数之前

    3.setup里面没有vue实例,故想通过this访问会是undefined,即第一张图提示文字所述

    4.setup函数中所定义的所有变量和方法,谨记要return出去,否则在vue文件(模板)中无法使用

    5.在渲染函数中可以直接使用在同一作用域下声明的响应式状态:

    1. import { h, ref } from 'vue'
    2. export default {
    3. setup() {
    4. const count = ref(0)
    5. return () => h('div', count.value)
    6. }
    7. }
    8. // 直接使用count.vue的方式

    6.子组件组件内部的方法想暴露给父组件通过ref方式去获取使用,通过expose方法即可

    1. import { ref } from 'vue'
    2. export default {
    3. setup(props, { expose }) {
    4. const num= ref(0)
    5. const count = ref(0)
    6. const increment = () => ++count.value
    7. expose({
    8. count,
    9. increment
    10. })
    11. }
    12. }
    13. 父组件: <child ref='childCom'></child>
    14. 调用: this.$refs.childCom.increment // 成功,可以获取到对应方法
    15. 调用: this.$refs.childCom.count // 成功,可以获取到对应值
    16. 调用: this.$refs.childCom.num // 失败,不可以获取到对应值
    17. expose未导出的属性,父组件中调用就会是undefined,即未暴露的属性或方法父组件是拿不到的!!!

    再次强调下:

    1.setup函数中不能使用this,即此时为包含vue实例,打印即为undefined

    2.setup函数中props入参是响应式的不能通过解构来使用,否则会丢失响应式,想解构在函数内部通过toRefs来使用

    1. import { toRefs, toRef } from 'vue'
    2. export default {
    3. setup(props) {
    4. // 将 `props` 转为一个其中全是 ref 的对象,然后解构
    5. const { title } = toRefs(props)
    6. // `title` 是一个追踪着 `props.title` 的 ref
    7. console.log(title.value)
    8. // 或者,将 `props` 的单个 property 转为一个 ref
    9. const title = toRef(props, 'title')
    10. }
    11. }

     3.setup函数中使用的响应式数据,要通过对应变量.value获取

    1. import { ref } from 'vue'
    2. const count = ref(0)
    3. console.log(count.value) // 0

    4.setup函数return后的属性,在模板中不用使用.value,直接使用变量名即可(它会自动暴露值)

    5.setup函数不能是异步的,只能为同步函数!!!

  • 相关阅读:
    VRRP协议以及关联Track详解
    2020年09月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
    解析java中的String类中的常用方法(二)
    QGIS编译(跨平台编译)之五十一:qgis_native库在Qt Creator环境下编译的错误处理
    java毕业生设计医患辅助系统计算机源码+系统+mysql+调试部署+lw
    @Repository详解
    【python】python内置函数——hasattr()判断对象是否包含某个属性,setattr()设置对象的属性值
    TS复习---typeScript介绍
    springboot:整合其它项目
    LayUi-----------用户管理
  • 原文地址:https://blog.csdn.net/COCOLI_BK/article/details/125445877