1. 搭建工程
1-1. 搭建工程
1-1-1. vue2
使用vue-cli:
1
| vue create vue3-app-vue-cli
|
1-1-2. vue3
使用vite:
兼容性注意:
Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。
1 2 3 4 5
| #使用 vit 创建一个名为demo的项目 npm init vite-app demo
#现版本是使用vit 构建一个项目,可以在后面直接指定项目名称 npm init vue@latest
|
1-2. 运行
1-2-1. vue2(使用vue-cli)
1-2-2. vue3(使用vite)
2. 重大变化
2-1. 创建方式
和vue2相比没有构造函数Vue
Vue2写法 (main.js) :
1 2 3 4 5 6 7
| 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' 导入会报错;
1 2 3 4 5
| import { createApp } from 'vue' import App from './App.vue' import './index.css'
createApp(App).mount('#app')
|
注意:
- Vue2升级到Vue3是一个截断式更新,即vue2中可用的部分语法在vue3中是不可用的;
new Vue(options) 和 createApp(App) 返回结果不一样,前者是一个组件对象,后者是一个应用对象,后者比较纯粹没有多余的方法;
2-2. 插件的使用
Vue2:
1 2 3 4 5 6 7 8 9 10
| import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false
Vue.use()
new Vue({ render: h => h(App), }).$mount('#app')
|
Vue3:
1 2 3 4 5 6 7 8
| import { createApp } from 'vue' import App from './App.vue' import './index.css'
const app = createApp(App)
app.use(); app.mount('#app')
|
2-3. 组件内部
2-3-1. this指向
- Vue2 中
this 指向的是当前组件实例
- Vue3中
this 指向的是一个 proxy 代理,这个proxy代理的就是组件实例
2-3-2. 写法
vue3: composition api(组合式)
vue2: option api(配置式)
2-3-3. setup 函数
只执行一次,且在所有生命周期钩子函数调用前执行
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <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() {
return { ...useCount(), }; }, }; </script>
|
3. composition api
3-1. ref
声明一个响应式数据
1
| import { ref } from "vue";
|
3-2. watchEffect
监控副作用
1 2 3 4 5 6 7 8 9 10
| import { watchEffect } from "vue"; const todosRef = ref("");
watchEffect(() => { todoStorage.save(todosRef.value); });
return { todosRef, };
|
__END__