vue3 script setup 语法糖用了才知道有多爽 (五)
迪丽瓦拉
2025-05-31 15:24:08
0

文章目录

    • 8. 关于 `"this"`
      • 小结
    • 9. setup 中的生命周期


这里是完整的目录图片,由于整篇文章篇幅太长,拆分成了几篇来展示
在这里插入图片描述

8. 关于 "this"

在 option api 当中,我们访问组件实例中的内容可以通过 this
但是在 vue 3 当中没有了 this 指针,官方 : 在 setup() 内部, this 不会是该活跃实例的引用,因为 setup() 是 在解析完其他组件选项之前被调用执行的,所以 setup() 内部的this的行为与其他选项中的 this 完全不同,这在和其他选项式 Api 一起使用 setup() 时可能会导致混淆
分析 : 创建组件实例 ⇒ 执行 setup 函数 ==> 解析 data,methods,computed
setup 的执行时机是在 beforeCreate 之前,此时的 this 是 undefined

Vue 3 setup() 语法

Vue3 当中提供了 getCurrentInstance(), getCurrentInstance() 代表上下文,也就是当前实例
getCurrentInstance() 当中的 ctx 属性,就相当于 vue2 当中的 this

import { getCurrentInstance, onMounted } from "vue";
export default {setup( ) {const { ctx } = getCurrentInstance(); //获取上下文实例,ctx=vue2的thisonMounted(() => {console.log(ctx, "ctx");ctx.http();});},
};

但是在这里需要注意 ! ! ! !的是 ctx 代替 this 仅仅适用于开发阶段,如果将项目打包放到生产服务器上,就会报错 ! ! ! , ctx 是无法获取路由和全局挂载对象的
解决方案 : 使用 proxy 来代替 ctx

import { getCurrentInstance } from 'vue'
export default ({name: '',setup(){const { proxy } = getCurrentInstance() // 使用proxy代替ctx,因为ctx只在开发环境有效onMounted(() => {console.log(proxy, "proxy");proxy.http();});}
})

小结

getCurrentInstance 只能在 setup 或者声明周期钩子当中调用
如果要在 setup 或者声明周期钩子之外使用的话,需要先在 setup 中调用 getCurrentInstance() 获取该实例之后再使用
但是从代码规范来说 : getCurrentInstace 只暴露给高阶使用场景 (如 : 库中) 官方规范强烈反对在应用的代码中使用 getCurrentInstance() , 官方文档中提示 : 请不要将 getCurrentInstance() 当中在组合式 API 的替代方案来使用

9. setup 中的生命周期

Vue 3 当中通过在生命周期钩子前面加上 " on"来访问组件的生命周期钩子

Option APIsetup 中执行时间
beforeCreate使用 setup()
created使用 setup()
beforeMountonBeforeMount在组件 DOM 实际渲染挂载之前调用。在这一步中,根元素还不存在。
mountedonMounted在组件的第一次渲染后调用,该元素现在可用,允许直接DOM访问
beforeUpdateonBeforeUpdate数据更新时调用,发生在虚拟 DOM 打补丁之前。
updatedonUpdatedDOM更新后,updated 的方法立即会调用。
beforeUnmountonBeforeUnmount在卸载组件实例之前调用。在这个阶段,实例仍然是完全正常的。
unmountedonUnmounted卸载组件实例后调用。调用此钩子时,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。
errorCapturedonErrorCaptured调试时使用。
renderTrackedonRenderTracked调试时使用。
renderTriggeredonRenderTriggered调试时使用。
activatedonActivated被keep-alive 缓存的组件激活时调用。
deactivatedonDeactivated被 keep-alive 缓存的组件停用时调用。

Vue 3 setup() 语法

// 组合 API

vue3 script setup 语法糖用了才知道有多爽 (一)
vue3 script setup 语法糖用了才知道有多爽 (二)
vue3 script setup 语法糖用了才知道有多爽 (三)
vue3 script setup 语法糖用了才知道有多爽 (四)

相关内容