200字
VUE3入门[精简版]
2023-07-20
2026-04-30

1. 搭建工程

1-1. 搭建工程

1-1-1. vue2

使用vue-cli:

vue create vue3-app-vue-cli

1-1-2. vue3

使用vite:

兼容性注意: Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

#使用 vit 创建一个名为demo的项目
npm init vite-app demo

#现版本是使用vit 构建一个项目,可以在后面直接指定项目名称
npm init vue@latest

1-2. 运行

1-2-1. vue2(使用vue-cli)

npm run serve

1-2-2. vue3(使用vite)

npm run dev

2. 重大变化

2-1. 创建方式

和vue2相比没有构造函数Vue

Vue2写法 (main.js) :

import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

Vue3写法(.mainjs):

vue3中没有默认导出,即 import Vue from 'vue' 导入会报错;

import { createApp } from 'vue'
import App from './App.vue'
import './index.css'

createApp(App).mount('#app')

注意:

  1. Vue2升级到Vue3是一个截断式更新,即vue2中可用的部分语法在vue3中是不可用的;
  2. new Vue(options)createApp(App) 返回结果不一样,前者是一个组件对象,后者是一个应用对象,后者比较纯粹没有多余的方法;

2-2. 插件的使用

Vue2:

import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false

//vue2使用插件
Vue.use()

new Vue({
  render: h => h(App),
}).$mount('#app')

Vue3:

import { createApp } from 'vue'
import App from './App.vue'
import './index.css'

const app = createApp(App)
//vue3使用插件
app.use();
app.mount('#app')

2-3. 组件内部

2-3-1. this指向

  1. Vue2 中 this 指向的是当前组件实例
  2. Vue3中 this 指向的是一个 proxy 代理,这个proxy代理的就是组件实例

2-3-2. 写法

vue3: composition api(组合式) vue2: option api(配置式)

2-3-3. setup 函数

只执行一次,且在所有生命周期钩子函数调用前执行

代码示例:

<template>
  <h1>count:{{ countRef }}</h1>
  <p>
    <button @click="decrease">decrease</button>
    <button @click="increase">increase</button>
  </p>
</template>

<script>
import { ref } from "vue";

//可以灵活的抽离公共代码,返回通常为对象;
function useCount() {
  let countRef = ref(0);
  const increase = () => {
    countRef.value++;
  };
  const decrease = () => {
    countRef.value--;
  };
  return {
    countRef,
    increase,
    decrease,
  };
}

export default {
  setup() {
    // console.log("所有生命周期钩子函数之前调用");
    // console.log(this); // this -> undefined

    // setup中,count是一个对象
    // 实例代理中,count是一个count.value

    //1. 新增

    //2. 修改

    //3. 删除
    return {
      ...useCount(),
    };
  },
};
</script>

3. composition api

3-1. ref

声明一个响应式数据

import { ref } from "vue";

3-2. watchEffect

监控副作用

import { watchEffect } from "vue";
const todosRef = ref("");
// 只要函数应用到了响应式数据,那么响应式数据一旦改变,方法就会执行一次
watchEffect(() => {
    todoStorage.save(todosRef.value);
});

return {
    todosRef,
};

评论