2022年必会Vue3.0学习 (强烈建议

2,297 阅读3分钟

Vue3.0新特性

中文文档

  • Composition Api (最核心)
  • v-model更改
  • v-for的key节点上的使用情况更改
  • v-if和v-for对同一元素的优先级更高
  • ref内部v-for不再注册引用数组
  • 功能组件只能使用普通函数创建
  • 异步组件需要使用defineAsyncComponent创建方法
  • 所有插槽都通过$slots
  • destroyed生命周期的选项已更名为unmounted
  • beforeDestroy生命周期的选项已更名为beforeUnmount

Vue3.0优缺点

优点

  1. 将Vue内部的绝大部分api对外暴露,使Vue具备开发大型项目的能力,例如compile编译api等
  2. webpack的treeshaking(tree shaking 是 DCE 的一种方式,它可以在打包时忽略没有用到的代码。)支持度友好
  3. 使用Proxy进行响应式变量定义,性能提高1.2~2倍
  4. ssr快了2~3倍
  5. 可在Vue2.0中单独使用composition-api插件,或者直接用它开发插件
  6. 对typescript支持更加友好
  7. 面向未来:对于尤雨溪最近创新的vite开发服务器(舍弃webpack、底层为Koa框架的高性能开发服务器),直接使用的Vue3.0语法

缺点

  1. vue3将不再支持IE11,Vue 在 2.X 版本仍然支持 IE11,如果你想使用类似 Vue 3 的新特性,可以等等 Vue 2.7 版本。这次的 RFC 宣布,将会对 2.7 版本做向后兼容,移植 3.x 的部分新功能,以保证两个版本之间相似的开发体验。
  2. 对于习惯了Vue2.0开发模式的开发者来说,增加了心智负担,对开发者代码组织能力有体验

同时也是能力提升的机会吧,特别喜欢Vue作者的而设计初心:让开发者随着框架一起成长

体验Vue3.0的四种姿势

现在来说,体验Vue3.0有四种姿势 传送门

  • 通过CDN:<script src="https://unpkg.com/vue@next"></script>
  • 通过 Codepen 的浏览器 playground
  • 脚手架 Vite: npm init vite-app hello-vue3 # OR yarn create vite-app hello-vue3

脚手架 vue-cli npm install -g @vue/cli # OR yarn global add @vue/cli\ vue create hello-vue3\ # select vue 3 preset

全局API

新的全局api:createApp

调用createApp返回一个应用实例,这是Vue3.0的新概念:

打开src/main.js

import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.mount('#app')

setup


setup函数是一个新的组件选项。作为组件内使用Composition API的入口点

创建组件实例,然后初始化props,紧接着调用setup函数。它会在beforeCreate钩子之前调用。

setup返回一个对象。则对象的所有属性(它是响应式的数据)都可以直接在模板中使用。相当于vue2.0中data函数返回的对象。

App.vue
<script>
export default {
  setup () {
    return {}
  }
}
</script>

响应式数据

  • ref:可传入任意类型的值并返回一个响应式且可改变的ref对象。ref对象拥有一个指向内部值的单一属性.value,改变值的时候必须使用其value属性
  • reactive:接受一个普通对象然后返回该普通对象的响应式代理。等同于2.x的Vue.obserable()

简写之:reactive负责复杂数据结构,ref可以把基本的数据结构包装成响应式

reactive


<template>
  <div>
    <h2>{{state.count}}</h2>
    <button @click="add">计算</button>
  </div>
</template>

<script>
import { reactive } from "vue";
export default {
  setup(){
    // 响应式变量声明 reactive负责复杂数据结构,
    const state = reactive({
      count1
    });
    function add() {
      state.count++;
    }
    return { state, add};
  }
};
</script>
复制代码

ref


<template>
  <div>
    <h2>{{state.count}}</h2>
    <h3>{{num}}</h3>
    <button @click="add">计算</button>
  </div>
</template>
<script>
import { reactive, ref } from "vue";
export default {

  setup(){
    const state = reactive({
      count1
    });
    const num = ref(0);
    function add() {
      state.count++;
      num.value+=2
    }
    return { state, add, num };
  }
};
</script>