一. 簡介
1. 說明
Vue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易於上手,還便於與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue 也完全能夠為復雜的單頁應用提供驅動。
Vue2.x :
官網地址:https://cn.vuejs.org/
GitHub地址:https://github.com/vuejs/vue
CDN地址:https://cdn.jsdelivr.net/npm/vue/dist/vue.js
Vue3.x:
官網地址:https://v3.cn.vuejs.org/
GitHub地址:https://github.com/vuejs/vue-next
CDN地址:<script src="https://unpkg.com/vue@next"></script>
2. MVVM模型
(1). MVC和MVVM都是一種軟件的體系結構
MVC是Model – View –Controller的簡稱,是在前期被使用非常框架的架構模式,比如iOS、前端;
MVVM是Model-View-ViewModel的簡稱,是目前非常流行的架構模式;
(2). 通常情況下,我們也經常稱Vue是一個MVVM的框架。
Vue官方其實有說明,Vue雖然並沒有完全遵守MVVM的模型,但是整個設計是受到它的啟發的 (Dom部分是View,Script部分中代碼是Model,Vue是VM)

3. Vue2快速入門
(1). 代碼實操
<body> <div id="app"> {{message}} </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { message: 'Hello Vue2!' } }) </script> </body>
(2). 運行結果

3. Vue3快速入門
(1). 代碼實操
<body> <div id="app">{{message}}</div> <script src="https://unpkg.com/vue@next"></script> <script> Vue.createApp({ data() { return { message: 'Hello Vue3!' } } }).mount('#app'); </script> </body>
(2). 運行結果

二. 走向Vue3
1. 源碼
(1). 源碼通過monorepo的形式來管理源代碼:
Mono:單個
Repo:repository倉庫
主要是將許多項目的代碼存儲在同一個repository中;
這樣做的目的是多個包本身相互獨立,可以有自己的功能邏輯、單元測試等,同時又在同一個倉庫下方便管理;
而且模塊划分的更加清晰,可維護性、可擴展性更強;
(2). 源碼使用TypeScript來進行重寫:
在Vue2.x的時候,Vue使用Flow來進行類型檢測;
在Vue3.x的時候,Vue的源碼全部使用TypeScript來進行重構,並且Vue本身對TypeScript支持也更好了;
2. 性能
(1). Vue3 使用Proxy進行數據劫持
在Vue2.x的時候,Vue2是使用Object.defineProperty來劫持數據的getter和setter方法的;這種方式一致存在一個缺陷就是當給對象添加或者刪除屬性時,是無法劫持和監聽的;所以在Vue2.x的時候,不得不提供一些特殊的API,比如$set或$delete,事實上都是一些hack方法,也增加了開發者學習新的API的成本;
而在Vue3.x開始,Vue使用Proxy來實現數據的劫持,這個API的用法和相關的原理我也會在后續講到;
(2). 刪除了一些不必要的API:
移除了實例上的$on, $off 和 $once;
移除了一些特性:如filter、內聯模板等;
(3). 包括編譯方面的優化:
生成Block Tree、Slot編譯優化、diff算法優化;
3. 新Api
(1). 由Options API 到 Composition API:
在Vue2.x的時候,我們會通過Options API來描述組件對象;Options API包括data、props、methods、computed、生命周期等等這些選項;存在比較大的問題是多個邏輯可能是在不同的地方:比如created中會使用某一個method來修改data的數據,代碼的內聚性非常差;
在Vue3.x的時候,Composition API可以將 相關聯的代碼 放到同一處 進行處理,而不需要在多個Options之間尋找;
(2). Hooks函數增加代碼的復用性:
在Vue2.x的時候,我們通常通過mixins在多個組件之間共享邏輯;但是有一個很大的缺陷就是 mixins也是由一大堆的Options組成的,並且多個mixins會存在命名沖突的問題;
在Vue3.x中,我們可以通過Hook函數,來將一部分獨立的邏輯抽取出去,並且它們還可以做到是響應式的;
如何從Vue2遷移到Vue3,詳見下面官方文檔:
https://v3.cn.vuejs.org/guide/migration/introduction.html
三. 目錄
階段一:Vue2.x用法
第八節:Vue Cli簡介/安裝、兩種Create項目的方式、相關配置說明
第九節:Vuex簡介、基本使用、核心功能(State、Mutation、Action、Getter) 和 案例實戰演練
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
階段二:Vue2.6.11 + Vue-Router3.2 + ElementUI2.15.1 + Vuex 全家桶
第一節:項目初始化(ElementUI、axios)、Git版本管理、基本環境搭建
第二節:基礎配置(路由、less、靜態資源、axios、ESLint)、基礎組件(Form、Message) 之登錄頁面搭建
第三節:基礎組件(Container布局、NavMenu導航) 之 系統主頁面搭建
第四節:基礎組件(Breadcrumb、Card、Input、Dialog、Switch、Select、MessageBox) 之 用戶管理
第五節:基礎組件(Table、Pagination、Tree、Tag) 之 角色/權限管理
第六節:基礎組件(Cascader/Tab/Steps/Upload/TimeLine/alert) 之 參數/商品/訂單
第七節:擴展組件(lodash/富文本/echart/nprogress) 和 幫助類(日期格式化)
第八節:項目優化上線之打包、報告分析、刪除console、webpack配置、CDN、首頁定制、路由懶加載、Express部署和管理
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
階段三:Vue3.x全家桶
第一節:代碼片段制作、template幾種寫法、各種場景下的this剖析
第二節:Vue3向下兼容1(Mustcache v-once text html pre cloak v-bind v-on v-if v-show等等)
第三節:Vue3向下兼容2(v-for、數組方法、v-model、計算屬性、監聽器)
第四節:從源碼角度剖析key在diff算法中的作用和Computed源碼剖析--未完
第七節:組件入門使用、組件通訊剖析(父傳子、子傳父、爺傳孫、兄弟/任意組件)、對比Vue2.x的傳值
第九節:動態組件和keep-alive緩存、webpack分包和異步組件、引用元素/組件($ref)、組件生命周期、組件v-model
第十節:復習mixin/extends 和 開啟Vue3的Composition Api(setup、reactiveApi、refApi、readonly)
第十一節:Vue3的Composition Api(toRefs/toRef、customerRef、computed、watchEffect【setup中獲取ref】、watch)
第十二節:Vue3的Composition Api(生命周期、provide/Inject、綜合練習-hook封裝) 和 setup頂層開發模式
第十三節:Vue3高級之 render/h函數、jsx、自定義指令、teleport、插件
第十四節:VueRouter4.x簡介、基本用法、路由懶加載(打包分析)、動態路由、路由嵌套、相關Api
第十五節:VueRouter4.x用法之router-link/router-view的v-slot、動態增刪路由、路由導航守衛
第十六節:Vuex4.x 簡介及state、getters、mutations、actions詳解(OptionApi 和 CompositionApi)
第十七節:Vuex4.x 之Module詳解(局部狀態、命名空間、輔助函數等) 和 補充nexttick用法
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
階段四:Webpack5系列
第一節:Webpack簡介、安裝-配置-打包、常用loader的使用(css/style/less/postcss-loader)
第二節:Webpack資源模塊(替代file/url-loader)、插件使用(Clean/Html/Define/Copy)、mode的配置說明
第三節:Babel的使用、Webpack集成Babel、單文件Vue打包
第四節:Webpack本地服務器搭建、剖析devServer的HRM熱替換和其它配置、resolve模塊解析、區分開發/生產環境方案實戰
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
階段五:基於Vue3.x全家桶的管理系統搭建
第一節:項目創建和各種配置規范(editorconfig、prettier、eslint、.browserslistrc、tsconfig、git等)
第二節:第三方庫集成和配置(webpack、element-plus、axios、vscode、區分不同環境)
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
第X節:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
!
- 作 者 : Yaopengfei(姚鵬飛)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 聲 明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
- 聲 明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
