likes
comments
collection
share

Vue3.0代号: One Piece ,它与v2究竟有哪些不同 ?

作者站长头像
站长
· 阅读数 57

前言

大家都知道,前端的技术一直更新的特别快,特别是框架。现在主流的框架就是大家熟知的 React 和 Vue ,今天主要讲下当下比较时髦的 Vue3.0 One Piece。Vue3.0是2020年09月18日正式发布的,这个版本与其他版本完全不同,它最大限度的减少了开发人员配置工具的次数,另外增添了许多丰富的内置功能,还附带了一个完整的GUI用于创建和管理项目。今天这篇文章主要讲 v2 和 v3 到底有哪些区别:

Vue2.0 和 Vue3.0 之间的区别是什么?

1--数据绑定原理发生变化

vue2 的双向数据绑定是利用了es5 的一个API Object.definepropert() 对数据进行劫持 结合发布订阅模式来实现的。vue3中使用了es6的proxyAPI对数据进行处理。

相比于vue2,vue3使用proxy API 优势有:

  1. defineProperty只能监听某个属性,不能对全对象进行监听 ;
  2. 可以省去for in 、闭包等内容来提升效率(直接绑定整个对象即可);
  3. 可以监听数组,不用再去单独的对数组做特异性操作,vue3可以检测到数组内部数据的变化

双向数据绑定的核心是数据变化侦测依赖收集

2--composition API

vue2 与vue3 最大的区别是vue2使用选项式api,对比vue3组合式api。旧的选项型api在代码里分割了不同得属性:data,computed,methods等;新得合成型api能让我们使用方法来分割,相比于旧的API使用属性来分组,这样代码会更加简便和整洁。这种就叫做组合式Api,这样可以将同一逻辑的内容写到一起。

3--vue3支持碎片化

好处:减少标签层级, 减小内存占用

vue源码:github1s.com/vuejs/core/…

4--建立数据data

vue2是把数据放入data中,vue3就需要使用一个新的setup()方法,此方法在组件初始化构造得时候触发。使用以下三步来建立反应性数据: 1. 从vue引入reactive;2.使用reactive() 方法来声明数据为响应性数据;3. 使用setup()方法来返回我们得响应性数据,从而template可以获取这些响应性数据。

5--生命周期的变化

  • 下面这张图是与 2.0 版本相当于的 3.0 组合式 API Vue3.0代号: One Piece ,它与v2究竟有哪些不同 ?
  • 这张图是新增的钩子函数:

Vue3.0代号: One Piece ,它与v2究竟有哪些不同 ?

// vue3.0
import {
  onBeforeMount,
  onMounted,
  onBeforeUpdate,
  onUpdated,
  onBeforeUnmount,
  onUnmounted
} from 'vue'

export default {
  setup({username},context) {
    onBeforeMount(() => {
      console.log('component is onBeforeMount')
    })
    onMounted(() => {
      console.log('component is onMounted')
    })
    onBeforeUpdate(() => {
      console.log('component is onBeforeUpdate')
    })
    onUpdated(() => {
      console.log('component is onUpdated')
    })
    onBeforeUnmount(() => {
      console.log('component is onBeforeUnmount')
    })
    onUnmounted(() => {
      console.log('component is onUnmounted')
    })
  }
}

6--父子传参不同,setup()函数特性

  1. setup()函数接收两个参数:props、context(包含attrs、slots、emit) ;
  2. setup函数是处于生命周期beforeCreated和created俩个钩子函数之前 ;
  3. 执行setup时,组件实例尚未被创建(在setup()内部,this不会是该活跃实例的引用,即不指向vue实例,Vue为了避免我们错误得使用,直接将setup函数中得this修改成了undefined);
  4. 与模板一起使用时,需要返回一个对象 ;
  5. 因为setup函数中,props是响应式得,当传入新的prop时,它将会被更新,所以不能使用es6解构,因为它会消除prop得响应性,如需解构prop,可以通过使用setup函数中得toRefs来完成此操作 ;
  6. 父传子,用props,子传父用事件 Emitting Events。在vue2中,会调用this$emit然后传入事件名和对象,在vue3中得setup()中得第二个参数content对象中就有emit,那么我们只要在setup()接收第二个参数中使用分解对象法取出emit就可以在setup方法中随意使用了 ;
  7. 在setup()内使用响应式数据时,需要通过 .value 获取 ;
import { ref } from 'vue'
const count = ref(0)
console.log(count.value)
  1. 从setup() 中返回得对象上得property 返回并可以在模板中被访问时,它将自动展开为内部值。不需要在模板中追加.value。 9--- setup函数只能是同步的不能是异步的 ;

7-- webpack和vite的区别

① vue2使用的是webpack形式去构建项目

webpack是一开始是入口文件,然后分析路由,然后模块,最后进行打包,然后告诉你,服务器准备好了可以开始干了

②vue3使用vite构建项目

先告诉你服务器准备完成,然后等你发送HTTP请求,然后是入口文件,Dynamic import(动态导入)code split point(代码分割)

最大的好处和区别就是为了让项目中一些代码文件多了以后去保存更新数据时更快能够看到实际效果,也就是所谓的(热更新)

8-- main.js文件

vue2中我们可以使用pototype(原型)的形式去进行操作,引入的是构造函数 vue3中需要使用结构的形式进行操作,引入的是工厂函数 vue3中app组件中可以没有根标签

9-- vue3 Teleport瞬移组件

Teleport一般被翻译成瞬间移动组件,实际上是不好理解的.我把他理解成"独立组件",他可以那你写的组件挂载到任何你想挂载的DOM上,所以是很自由很独立的。

转载自:https://juejin.cn/post/7153952988262826020
评论
请登录