• Vue3 getCurrentInstance与ts结合使用的问题


    关于Vue3里面的getCurrentInstance:可以获取挂载在全局的属性和获取上下文

    这里会碰到几个问题:

    一、不能使用getCurrentInstance的ctx

    我们在获取Vue3中全局挂载的方法时会这么写:

    这里的ctx不是setup提供的ctx

    const { ctx } = getCurrentInstance()

    这里ctx打包后在生产环境下是获取不到的,请各位没玩过生产的别不小心误导到别人啊哈,恰好在Vue3的issues中找到的。

    正确应该使用

    const { proxy } = getCurrentInstance()

    二、关于在ts中使用到类型定义错误问题

    报错:...类型“ComponentInternalInstance | null”

    就嗝屁了。。。

    1. 可以添加ts忽略去解决

      // @ts-ignore
      const { proxy } = getCurrentInstance();

    但是这个方法很无脑,也麻烦。。。

    2. 考虑到在获取上下文和全局挂载实例的时候会用到这个getCurrentInstance,那我们来新建 hooksuseCurrentInstance.ts

    import { ComponentInternalInstance, getCurrentInstance } from 'vue'
    export default function useCurrentInstance() {
        const { appContext } = getCurrentInstance() as ComponentInternalInstance
        const globalProperties = appContext.config.globalProperties
        return {
            globalProperties
        }
    }

    组件中使用

    // 先引入文件
    import useCurrentInstance from "@/hooks/useCurrentInstance";
    ...
    // 在setup 中使用处理
    const { globalProperties } = useCurrentInstance();

    注意的点:千万不要在getCurrentInstance() 中获取ctx来使用element等东西,这玩意在生成环境下结构就不一样了,会报undefined。可以使用proxy。(我第一次搞vue3就卡在这里2天)

  • 相关阅读:
    pythonldap 简单试用
    shell 将文件名读入数组
    pytest命令行传入自定义的参数到测试文件中
    Python实现在不同Linux主机之间拷贝文件
    使用minio搭建私有化对象存储服务
    CPU/GPU/NPU
    pytest 内置和自定义marker
    安装SQLite3引发的库问题
    C标准库——程序员等级
    这样还弄不死指针?
  • 原文地址:https://www.cnblogs.com/mica/p/14756503.html
Copyright © 2020-2023  润新知