这里是完整的目录图片,由于整篇文章篇幅太长,拆分成了几篇来展示
"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 或者声明周期钩子当中调用 Vue 3 当中通过在生命周期钩子前面加上 " on"来访问组件的生命周期钩子 Vue 3 setup() 语法 vue3 script setup 语法糖用了才知道有多爽 (一)
小结
如果要在 setup 或者声明周期钩子之外使用的话,需要先在 setup 中调用 getCurrentInstance() 获取该实例之后再使用
但是从代码规范来说 : getCurrentInstace 只暴露给高阶使用场景 (如 : 库中) 官方规范强烈反对在应用的代码中使用 getCurrentInstance() , 官方文档中提示 : 请不要将 getCurrentInstance() 当中在组合式 API 的替代方案来使用9. setup 中的生命周期
Option API setup 中 执行时间 beforeCreate 使用 setup() created 使用 setup() beforeMount onBeforeMount 在组件 DOM 实际渲染挂载之前调用。在这一步中,根元素还不存在。 mounted onMounted 在组件的第一次渲染后调用,该元素现在可用,允许直接DOM访问 beforeUpdate onBeforeUpdate 数据更新时调用,发生在虚拟 DOM 打补丁之前。 updated onUpdated DOM更新后,updated 的方法立即会调用。 beforeUnmount onBeforeUnmount 在卸载组件实例之前调用。在这个阶段,实例仍然是完全正常的。 unmounted onUnmounted 卸载组件实例后调用。调用此钩子时,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。 errorCaptured onErrorCaptured 调试时使用。 renderTracked onRenderTracked 调试时使用。 renderTriggered onRenderTriggered 调试时使用。 activated onActivated 被keep-alive 缓存的组件激活时调用。 deactivated onDeactivated 被 keep-alive 缓存的组件停用时调用。 // 组合 API
vue3 script setup 语法糖用了才知道有多爽 (二)
vue3 script setup 语法糖用了才知道有多爽 (三)
vue3 script setup 语法糖用了才知道有多爽 (四)
上一篇:HNUCM省赛训练赛第14场题解
下一篇:yolov5 相关操作个人记录