项目中总结

1、declare global

2、getCurrentInstance()

vue3的setup中没有this时需要使用getCurrentInstance()来获取。getCurrentInstance()可以用来获取当前组件实例

let { proxy } = getCurrentInstance();

etCurrentInstance是一个function方法,getCurrentInstance()是一个对象,proxy也是一个对象。proxy是getCurrentInstance()对象中的一个属性,通过对象的解构赋值方式拿到proxy。

getCurrentInstance只能在setup生命周期钩子中使用。

开发中只适用于调试! 不要用于线上环境,否则会有问题!

解决方案:let { proxy } = getCurrentInstance();

添加一个可以在应用的任何组件实例中访问的全局 property。

// 之前(Vue 2.x)
Vue.prototype.$http = () => {}
 
// 之后(Vue 3.x)
const app = Vue.createApp({})
app.config.globalProperties.$http = () => {}

//当我们想在组件内调用http时需要使用getCurrentInstance()来获取。
import { getCurrentInstance, onMounted } from "vue";
export default {
  setup( ) {
    const { proxy } = getCurrentInstance(); //获取上下文实例,proxy=vue2的this
    onMounted(() => {
      proxy.http();
    });
  },
};

3、unplugin-auto-import,Vue3自动引入api插件

Vue3项目,定义数据、方法都要引入对应的api,比如ref、reactive、onMounted等等,很是麻烦,所以有了自动引入的插件,安装配置后都不用再引api,而可以直接使用了

 在根目录下会生成一个auto-import.d.ts文件,和main.ts平级。这个文件就是替你去引入各种api的集成文件

4、vite的环境变量 import.meta.env

  • import.meta.env.MODE: {string} 应用运行的模式。
  • import.meta.env.BASE_URL: {string} 部署应用时的基本 URL
  • import.meta.env.PROD: {boolean} 应用是否运行在生产环境。
  • import.meta.env.DEV: {boolean} 应用是否运行在开发环境 (永远与import.meta.env.PROD相反)。

5、onMounted、onUnmounted

onMounted比setup晚一些,setup会先执行,和书写顺序没关系

setup() {
    onMounted(() => {
      //组件挂载的过程 包括数据 dom等
      console.log("onMounted");
    });
    console.log("setup");
}

输出  
setup
onMounted

onMounted有哪些用法

需要在组件完全挂载到 DOM 树上后再对 DOM 或组件进行操作,就可以使用 onMounted 这个钩子函数

1:发请求
要通过跟后端交互来获取一些数据,就可以放在onMounted里面来发一些数据请求、

2:做一些数据初始化的操作
比如说最常见的就是接收路由传递的参数

通过当前组件定义的数据来接收传递过来的数据

3:处理DOM元素

使用 onMounted 钩子函数,可以确保 DOM 元素已经完全挂载到页面上后再进行操作,这样可以避免操作未挂载完毕的元素

onUnmounted组件卸载时的生命周期,一般用于清除定时器 清除闭包函数

6、setup

setup就是Vue3的一个新的语法糖,在setup函数中,所有的ES模块导出都被认为是暴露给上下文的值,并且包含在setup()返回对象中(从生命周期钩子的视角来说,它会在beforeCreate钩子之前被调用)

  • 如果将setup写在script标签中的话,那么内容就不再需要去暴露
  • 如果使用setup()这种形式去写,就会需要return去进行暴露

7、确定赋值断言 let x: number; (Variable 'x' is used before being assigned.)

允许在实例属性和变量声明后加一个 ! 号,从而告诉 TypeScript 这个属性会被明确赋值。
通过 let x!: number; 确定赋值断言,TypeScript 编译器就会知道该属性会被明确地赋值。

let x: number;
setX();
// Variable 'x' is used before being assigned.
// 变量“x”在赋值之前使用
console.log(2 * x); // Error
 
function setX() {
  x = 10;
}
使用 确定赋值断言

let x!: number;
 
function setX() {
  x = 10;
}
 
setX();
console.log(2 * x); // ok ===> 20

8、Vue3 清空Reactive定义的数组

Vue3必须通过myArray.length = 0的方式清空数组,不能直接让它等于[]或重新声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值