Vue 3 尝鲜

236 阅读2分钟

4 月 16 日,vue 3 正式进入 beta 阶段,终于忍不住尝鲜的心情,今天来尝试一下 Vue 3.0 的新特性。

创建 Vue 3 项目

安装 vue-cli

// 安装 vue-cli
cnpm install -g @vue/cli

vue create 创建项目

vue create vue3.0

执行这步时,会有两个选项,我们选择第一个,先创建一个简单的 Vue 初始化项目。

现在我们已经创建了一个 Vue 的初始化项目。我们可以查看根目录下的package.json 文件。

可以看到,新建的项目还是 Vue 2.6 版本的。

还没升级之前的 2.x 版本

添加 vue-next 插件

现在需要安装 vue-next 插件来把 Vue 升级2.6到 3.0beta 版本。

// 安装完vue/cli以后,可以使用vue add添加插件
// 目前3.0对应的是vue-next项目
vue add vue-next

此时已经升级到 vue 3.0 了

左边目录结构并没有多大变化

但是 main.js 的语法却和 Vue 2.x 的大不相同。

运行项目

npm run serve

Vue 3.0 项目搭建完毕!如此简单!

开始一个小例子

在 Vue 2.x 中,我们一般在 data 里声明变量,methods 来声明方法。那么在 Vue 3 中呢?

在Vue3 的 可以使用 composition API 响应式来实现。

setup是新增的组件选项,相当于在组件内部使用Composition API的入口点。在 setup 方法中,我们可以创建使用新的 api 创建响应式的实例,返回属性和方法给模板渲染。

<template>
  <div id="app">
    <div>{{ count }}</div>
  </div>
</template>

<script>
import { ref } from 'vue'

export default {
  name: 'App',
  setup() {
    const count = ref(0)
    return {
      count
    }
  }
}
</script>

<style>
#app {
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

其中,ref,可以初始化变量,返回的是一个 value reference (包装对象)。一个包装对象只有一个属性:.value ,该属性指向内部被包装的值。

我们知道,在 Vue 2.x 中,改变数组,必须触发数组的更新机制,使用变更方法,或者替换数组,但在 Vue 3 中,采用了 Proxy 代替了原来的 Object.defineproperty 的形式,所以,直接改变数组某一项,也会生效了。

我们来试一下改变数组的第一个元素

<template>
  <div id="app">
    <div>count: {{ count }}</div>
    <ul>
      <li v-for="item in arr" :key="item">{{ item }}</li>
    </ul>
    <button @click="change">改变</button>
  </div>
</template>

<script>
import { ref } from 'vue'

export default {
  name: 'App',
  setup() {
    const count = ref(0)
    const arr = ref(['1','2','3'])
    const change = () => {
      count.value++
      arr.value[0] = count.value
    }
    return {
      count, arr, change
    }
  }
}
</script>

<style>
#app {
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

展示效果:

最后

终于开始了Vue 3的探究之旅。Vue 3 和 Vue 2.x的不同, 主要体现在 性能Tree-shaking supportComposition APIFragmentTeleportSuspenseTypeScript支持度自定义 Render 上。 更多的新特性还需日后多花时间了解......