和vue2对比的Vue3新写法,在vue2基础上快速上手vue3项目

本文的目的,是为了让已经有 Vue2 开发经验的   ,快速掌握 Vue3 的写法。

一、Vue3 里 script 的三种写法

首先,Vue3 新增了一个叫做组合式 api 的东西,英文名叫 Composition API。因此 Vue3 的 script 现在支持三种写法,

1、最基本的 Vue2 写法



2、setup() 属性



3、

第一种写法,跟过去 Vue2 的写法是一样的,所以我们不过多介绍。

第二种写法,所有的对象和方法都需要 return 才能使用,太啰嗦。除了旧项目,可以用这种方式体验 Vue3 的新特性以外,我个人不建议了解这种方式。反正我自己暂时不打算精进这部分。

所以,接下来,我们主要介绍的,也就是

// Vue3 的写法



2)注意事项——组合式 api 的心智负担

a、ref 和 reactive

Vue3 里,还提供了一个叫做 reactiveapi

但是我的建议是,你不需要关心它。绝大多数场景下,ref 都够用了。

b、什么时候用 ref() 包裹,什么时候不用。

要不要用ref,就看你的这个变量的值改变了以后,页面要不要跟着变。

当然,你可以完全不需要关心这一点,跟过去写 data 一样就行。

只不过这样做,你在使用的时候,需要一直 .value

c、不要解构使用

在使用时,不要像下面这样去写,会丢失响应性。

也就是会出现更新了值,但是页面没有更新的情况

// Vue3 的写法


2、methods

声明事件方法,我们只需要在 script 标签里,创建一个方法对象即可。

剩下的在 Vue2 里是怎么写的,Vue3 是同样的写法。

// Vue2 的写法


// Vue3 的写法


3、props

声明 props 我们可以用 defineProps(),具体写法,我们看代码。

1)写法对比

// Vue2 的写法


// Vue3 的写法


2)注意事项——组合式 api 的心智负担

使用 props 时,同样注意不要使用解构的方式。

4、emits 事件

与 props 相同,声明 emits 我们可以用 defineEmits(),具体写法,我们看代码。

// Vue2 的写法


// Vue3 的写法


5、computed

直接上写法对比。

// Vue2 的写法


// Vue3 的写法


6、watch

这一部分,我们需要注意一下了,Vue3 中,watch 有两种写法。一种是直接使用 watch,还有一种是使用 watchEffect

两种写法的区别是:

  • watch 需要你明确指定依赖的变量,才能做到监听效果。
  • watchEffect 会根据你使用的变量,自动的实现监听效果。

1)直接使用 watch

// Vue2 的写法


// Vue3 的写法


2)使用 watchEffect

// Vue2 的写法


// Vue3 的写法


7、生命周期

Vue3 里,除了将两个 destroy 相关的钩子,改成了 unmount,剩下的需要注意的,就是在

/ 组合式 api 写法



三、全局Api的转移(很重要)

2.x 全局 API( Vue) 3.x 实例 API(app)
Vue.config.xxxx app.config.xxxx
Vue.config.productionTip 移除
Vue.component app.component
Vue.directive app.directive
Vue.mixin app.mixin
Vue.use app.use
Vue.prototype app.config.globalProperties

vue2中可以通过Vue.prototype去操作原型,在vue3中只能通过app.config.globalProperties

四、provide与inject

在vue2中,如果要在后代组件中使用父组件的数据,那么要一层一层的父子组件传值或者用到vuex,但是现在,无论组件层次结构有多深,父组件都可以作为其所有子组件的依赖提供者。

这个特性有两个部分:父组件有一个 provide 选项来提供数据,子组件有一个 inject 选项来开始使用这些数据。

//父
import { provide } from 'vue'
setup(){
 let fullname = reactive({name:'阿月',salary:'15k'})
 provide('fullname',fullname) //给自己的后代组件传递数据
 return {...toRefs(fullname)}
}
//后代
import {inject} from 'vue'
setup(){
 let fullname = inject('fullname')
 return {fullname}
}

你可能感兴趣的:(vue.js,javascript,前端)