v3之常用函数和参数梳理

79 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2天 点击查看活动详情

前言

听说v2要停止维护了,现在外面的招聘都是百分百的要求你v3必会的,讲真,你不会你都不好意思去面试。之前的项目也是经常使用到v3的,不过现在一直在维护v2的项目,今天纯属是来复习一下的

再见了this

  1. vue中的this到底是个什么东西,为什么我就要用this呢

答:this它不是个东西,它就是个指向上下文的实例。看过源码的同学应该很容易理解this这个东西都包含了什么。

  1. v3中如何拿到这个this

答: 在vue中提供了一个方法供你拿到this,具体代码如下:

` import { getCurrentInstance, onMounted } from "vue";

  1. export default {
  2. setup( ) {
  3. const { ctx } = getCurrentInstance(); // ctx=vue2的this
  4. onMounted(() => {
  5. console.log("ctx",ctx);
  6. });
  7. },
  8. `

[getCurrentInstance]代表上下文,即当前实例。ctx相当于Vue2的this, 但是有点小问题,这个this只适用于开发环境,等你打包时就会报错。

解决方案如下:

`1. import { getCurrentInstance } from 'vue'

  1. export default ({
  2. name: '',
  3. setup(){
  4. const { proxy } = getCurrentInstance() // 使用proxy代替ctx
  5. onMounted(() => {
  6. console.log(proxy, "proxy");
  7. });
  8. } `

切记:ctx只在开发环境有效

  1. v3为什么要摒弃this

答:为了拒绝耦合性,官网说法是这样的:在 setup() 内部,this 不会是该活跃实例的引用,因为 setup() 是在解析其它组件选项之前被调用的,所以 setup() 内部的 this 的行为与其它选项中的 this 完全不同。这在和其它选项式 API 一起使用 setup() 时可能会导致混淆。

来简单分析下:

  1. v2中this是非常好用的,不管是什么东西,你基本99%都可以用this取到,但是他的耦合性太大,各种this遍地存在,变量和方法之间有时候比较混淆。

  2. v3的setup它的生命周期是在created之前的,所以你在setup中是取不到this,我们在用到this的地方也是将他写在mounted中。

nextTick

这个东西不是常用吧,但是在某些时刻还是要用到的,在v2中这个东西是绑在vue实例上的,直接this.nextTick就可以使用

v3中nextTick使用

import { nextTick } from 'vue'

setup () {

const visible = ref(false)
    
nextTick(()=>{
    
	visible.value = true
})
    
return {
	visible
}

}

就是这样简单,你只需要把它引入就可以使用了。

setup参数

  1. props

吐槽: 为什么你setup写了props还要我再写个props去接收你的参数,你就不能让我只写一次吗,你下次能不能简化它。当然如果有小伙伴觉得我说的不对,欢迎你来纠正。

  1. context

2.1. const { attrs,slots,emit } = context

// attrs 获取组件传递过来的属性值,

// slots 组件内的插槽

// emit 自定义事件 子组件

这三个属性实是我们常见的属性,只不过是统一的放在了context中了。

注意:context不止是这么多的属性

image.png

这是打印context的结果,我们可以看到其中还包含了listeners parent refs root这些属性,所以在我们平常用到的时候只有三种,但是当一些其他情况发生时我们也可以从context中解构出其他属性来使用

注:

context.refs.xxx = this.refs.xxx

context.listeners = this.listeners