《看完它面試必solo | 尋找C站寶藏》

今天給大家摟點干貨,2020 年 9 月 18 日晚 11 點半發布了 Vue 3.0 版本。到目前已經很多公司開始鼓勵大家去學習Vue3了,在這里小編就把自己所了解到的‘皮毛’貢獻給大家

Vue3.0 的突出亮點

  • Performance:性能比Vue2快1.2~2倍
  • Tree shaking support:按需編譯。體積比Vue2更小
  • Composition API:組合API(類似React Hooks)
  • Better TyprScript support:更好的Ts支持
  • Custom Renderer API:暴露了自定義渲染API
  • Fragment,Teleport(protal),Supense:更先進的組件
Vue3.0 是如何變快的
  • diff 方法優化

    	//通過下面這段代碼 我們對比Vue2和Vue3的渲染<div><span>姓名:</span> <a>{{data.name}}</a></div>
    

    1.Vue2 中的虛擬dom是進行全量對比的
    在這里插入圖片描述
    2.Vue3新增了靜態編輯(PathFlag)在與上次須彌節點對比的時候,只對比帶有pathFlag的節點,并且可以通過flag的信息得知當前要對比的具體內容
    在這里插入圖片描述
    pathFlags的常見參數
    在這里插入圖片描述

  • hoistStatic 靜態提升

    1.Vue2中無論元素是否參與更新 每次都會重新創建 然后在渲染
    在這里插入圖片描述 2.Vue3中對于不參與更新的元素 會做靜態提升 只會被創建一次 在渲染時直接復用即可
    在這里插入圖片描述

  • cacheHandlers 事件偵聽的緩存

    默認情況下onClick會被視為動態綁定 所以每次都會去追蹤他的變化
    在這里插入圖片描述因為是同一個函數 所以沒有追蹤變化 直接緩存起來復用即可 我們看到下面的的代碼中就沒有靜態標識 說明我們無需對比
    在這里插入圖片描述

  • ssr 渲染

    有大量靜態內容的時候,這些內容會被當做純字符串推進一個buffer里面,及時存在動態的綁定,會通過模板插值嵌入進去,這樣要比通過dom來進行渲染的快很多
    當靜態內容大到一定量級時候,會用_createStaticVNode方法在客戶端去生成一個static node這些靜態node,會被直接innerHtml,就不需要創建對象,然后根據對象渲染。

Vue3的組合API

在Vue2中我們的如果想實現一個功能首先我們要去data中去定義功能所需要的數據,然后我們要在methods或者computed或者watch中編寫我們要實現功能的邏輯,每一個功能都是要重復上面的數據跟業務邏輯進行分離的編寫,不利于我們的編寫和維護,下面Vue3中就解決了這個問題

  • Vue3中提供了組合API——setup setup函數是組合API的入口文件
  1. 入口函數中定義變量
    在這里插入圖片描述
    首先我們在setup函數中去聲明變量
    聲明的變量要想被監聽 我們需要引入ref進行使用
    我們想要在頁面中進行渲染 還需要將變量暴露出去后在模板中才會生效

  2. 入口文件中編寫事件函數
    在這里插入圖片描述
    在模板中注冊事件后,直接在組合API中去編寫方法就可以了

  3. 組合API中reactive的使用
    在這里插入圖片描述
    在前面我們了解到如果想要監聽到組合API中的數據的變化需要用到ref,但是ref只能監聽到簡單數據類型的變化,如果想要監聽復雜類型的變化我們就要用到resctive

  4. 組合API的抽離
    在這里插入圖片描述
    我們可以看到上面的將用戶的一些操作全部放到了 useRemoveStudent 方法中,在方法中進行暴露,我們在組合API中直接引入然后暴露就可以使用,進而解決了Vue2中的業務邏輯和數據分離的痛處,上面我們說可以將數據和邏輯放到方法中 我們也可以像下面這樣放到模塊中進行導入
    在這里插入圖片描述

  • Composition API的本質
    我們可以將Composition API翻譯成 混合/注入API,其實就是將我們的Composition API中return 暴露出來的內容對 optionApi進行注入 注入到我們的data和methods中,在實際的開發中Composition API和Option API是可以聯合使用的

  • setup的執行時機
    beforeCreate:組件剛剛被創建出來,組件中的data和methods還沒有初始化好
    setup
    created:組件被創建出來,且組件中的data和methods已經初始化好了

  • setup函數使用的注意點
    因為他的執行順序是在beforeCreate和created函數之間,所以在setup函數中是無法使用data和methods
    因為我們在setup函數中不能使用data和methods,所以Vue中為了避免我們錯誤的使用,Vue3中直接將setup函數中的this修改成了undefined
    setup函數中只能是同步的 不能是異步

  • 什么是reactive
    reactive是Vue3中提供的實現響應式數據的方法,在Vue2中影響是數據是通過defineProperty來實現的,而在Vue3中響應式數據是通過ES6的Proxy來實現的 reactive本質:就是將傳入的數據包裝成一個Proxy對象

  • reactive注意點
    reactive參數必須是對象(json/arr)-如果給reactive傳遞了其它對象
    默認情況下修改對象,界面不會自動更新+如果想更新,可以通過重新賦值的方式
    在這里插入圖片描述

Vue的雙向數據綁定

  • Vue2 通過 Object.defineProperty 將對象屬性轉化為 getter/setter , 該屬性是 ES5 中無法被 shim 的特性,也是 vue 不支持 IE8 及以下版本瀏覽器的原因
    在 vue 中, Object.defineProperty 無法監控到數據的下標變化,導致直接通過數組下標給數組設置新值時,無法做到實時響應。目前 vue 只針對數組的變異方法 push/pop/shift/unshift/splice/sort/reverse 做了 hack 處理,存在響應局限
    在這里插入圖片描述
  • Vue3 則采用Proxy
    -Proxy 是 ES6 中新增的一個特性,翻譯過來意思是"代理",用在這里表示由它來“代理”某些操作。 Proxy 讓我們能夠以簡潔易懂的方式控制外部對對象的訪問。其功能非常類似于設計模式中的代理模式。
    -Proxy 可以理解成,在目標對象之前架設一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。
    -使用 Proxy 的核心優點是可以交由它來處理一些非核心邏輯(如:讀取或設置對象的某些屬性前記錄日志;設置對象的某些屬性值前,需要驗證;某些屬性的訪問控制等)。 從而可以讓對象只需關注于核心邏輯,達到關注點分離,降低對象復雜度等目的。

Vue3對ts的支持

vue2 最初是使用純 ES(Javascript) 寫成的,而沒有引入類型檢查系統。類型檢查能有效減少重構過程中引入錯誤的機會,雖然后續采用了 Facebook 的 Flow type checker , 但沒有明顯的改觀,相比較 TypeScript 與 Visual Studio Code 集成開發工具的深度集成,Flow type checker對集成開發環境的支持也不理想。切換到 TypeScript 將允許我們自動生成聲明文件,從而減輕維護負擔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

KVC/KVO 本質

KVO 的實現原理 KVO是關于runtime機制實現的當某個類的對象屬性第一次被觀察時&#xff0c;系統就會在運行期動態地創建該類的一個派生類&#xff0c;在這個派生類中重寫基類中任何被觀察屬性的setter方法。派生類在被重寫的setter方法內實現真正的通知機制如果原類為Person&am…

mysql 各個版本驅動jar包

http://central.maven.org/maven2/mysql/mysql-connector-java/轉載于:https://www.cnblogs.com/mzdljgz/p/11063354.html

攻破 程序員35歲 “瓶頸” 那都不是事!

我正在參與CSDN《新程序員》有獎征文&#xff0c;點擊和我一起參與吧 下面呢&#xff0c;我就在這里給大家講述一下我的經歷吧。 初衷 作為程序猿的我們&#xff0c;初衷在哪里&#xff0c;高薪&#xff1f;體面&#xff1f;熱愛&#xff1f;曾經有一個同學聊天中說到這個話…

Dollar Dayz POJ - 3181

解法 完全背包大數。。。不想寫大數了放個python得了 代碼 dp[0 for i in range(2000)] n,kmap(int,input().split()) num[i for i in range(1,k1)] dp[0]1 for i in range(k):for j in range(num[i],n1):dp[j]dp[j-num[i]] print(dp[n]) 轉載于:https://www.cnblogs.com/bacca…

Vue項目中引用‘阿里巴巴字體圖標庫iconfont’

1.前言 在實際開發中&#xff0c;作為前端開發人員的我們經常會遇到下面這種ui圖 我們看到在上面兩個平臺設計圖中的出現了大量的圖標&#xff0c;在某種情況下&#xff0c;這種圖標是需要我們自己去找的&#xff0c;不要噴我們的 ui 哈&#xff0c;主要是我喜歡麻煩 哈哈&…

學習進度條-17

第十七周 所花時間&#xff08;包括上課&#xff09; 5小時 代碼量&#xff08;行&#xff09; 300 博客量&#xff08;篇&#xff09; 4 了解到的知識點 對sql server數據庫的連接&#xff0c;頁面的跳轉 轉載于:https://www.cnblogs.com/zhaoxinhui/p/11068736.html

項目流程

轉載于:https://www.cnblogs.com/Koma-vv/p/10243286.html

最詳細的講解 JS 原型與原型鏈

文章目錄一. 普通對象與函數對象二. 構造函數三. 原型對象四. proto五. 構造器六. 原型鏈七. Prototype總結一. 普通對象與函數對象 JavaScript 中&#xff0c;萬物皆對象&#xff01;但對象也是有區別的。分為普通對象和函數對象&#xff0c;Object 、Function 是 JS 自帶的函…

jmeter分布式壓測原理簡介1

1、什么叫分布式壓測&#xff1f; 分布式壓測&#xff1a;模擬多臺機器向目標機器產生壓力&#xff0c;模擬幾萬用戶并發訪問 2、分布式壓測原理&#xff1a;如下 3、更多補充.....待添加 轉載于:https://www.cnblogs.com/yoyoblogs/p/11071774.html

十三 re模塊

一&#xff1a;什么是正則&#xff1f; 正則就是用一些具有特殊含義的符號組合到一起&#xff08;稱為正則表達式&#xff09;來描述字符或者字符串的方法。或者說&#xff1a;正則就是用來描述一類事物的規則。&#xff08;在Python中&#xff09;它內嵌在Python中&#xff0c…

帶你玩轉 ui 框架 ——scoped及樣式穿透問題詳解

前言 在我們前端的開發中經常會使用到各種 ui 框架 下面這兩個是比較火的&#xff0c;也是我常用的兩個ui框架。 問題描述 但是在使用框架的時候難免會遇到需要改變組件中的一些樣式&#xff0c;當然如果我們所有頁面的組件樣式都是統一的話&#xff0c;我們可以進行全局設置…

Npoi Web 項目中(XSSFWorkbook) 導出出現無法訪問已關閉的流

NPOI生產.xlsx文件件時&#xff0c;在使用book.Write(ms);后&#xff0c;會關閉流&#xff0c;這樣導致再次使用Respons輸出流的時候就出錯了。 造成關閉流的主要原因有時其實是跨域&#xff0c;同域是沒有問題的。 //新建類 重寫Npoi流方法 public class NpoiMemoryStream : M…

三分鐘帶你掌握 CSS3 的新屬性

文章目錄1. css3簡介2. css3邊框2.1 邊框圓角2.2 邊框陰影3. css3背景3.1背景圖大小3.2背景圖起始點4. css3文本效果4.1 文本陰影4.2 文本換行5. css3字體圖標6. css32D轉換7. css3 3D轉換8. css3 transition8.1 單項改變8.2 單項改多項改變9. css3 動畫1. css3簡介 CSS 用于控…

用 div 仿寫 input 和 textarea 功能

div仿寫input和textarea input不能換行&#xff0c;textarea也不能跟隨內容多少而增加高度。 contenteditable true; <div class"msg_content" contenteditable"true" placeholder在這里輸入您的留言或建議></div> .msg_content {box-sizing:…

Vue項目中如何設置動態的TDK

TDK是什么 TDK就是網站的標題&#xff08;title&#xff09;、描述&#xff08;description&#xff09;和關鍵詞&#xff08;keyword&#xff09; TDK在哪里 上面大佬對TDK的概念解釋的很全面&#xff0c;但是在網頁中的TDK在哪里呢&#xff0c;作為開發人員打開F12我們就…

[Pytorch]Pytorch的tensor變量類型轉換

原文&#xff1a;https://blog.csdn.net/hustchenze/article/details/79154139 Pytorch的數據類型為各式各樣的Tensor,Tensor可以理解為高維矩陣。與Numpy中的Array類似。Pytorch中的tensor又包括CPU上的數據類型和GPU上的數據類型&#xff0c;一般GPU上的Tensor是CPU上的Tenso…

PHP從零開始--基礎篇

一、 變量 1.1概念 變量是存儲數據的用的容器。 1.2定義變量 變量名的語法規則&#xff1a; 可以是數字、字母、下劃線&#xff0c;但是不能以數字開頭不能出現空格變量名是區分大小寫變量名不能是系統中的關鍵字行業約定的語法規范 駝峰命名法 比如 myname 定義成 myNam…

node

? Table of Contents 1. 全局對象2. 代碼執行優先級3. 模塊導入4. 模塊加載 4.1. 文件模塊優先級4.2. 文件夾加載優先級 4.2.1. 包&#xff08;文件夾&#xff09;下的入口文件優先級4.2.2. 包加載優先級5. 核心模塊的簡單使用 5.1. events1 全局對象 globalconsole.log(globa…

一個關于WCF調用遠程鏈接返回405錯誤不允許使用此方法的問題

最近在調試WCF的接口時一直返回“405不允許使用此方法”&#xff0c;這個問題困擾了大半天&#xff0c;網上查了各種辦法&#xff0c;但是每個人遇到的問題不同還是不能解決。 最后無意之中發現問題所在&#xff0c;記錄一下幫助后面的同學解決問題。 WCF遠程方法會配置屬性Web…

PHP從零開始--循環數組

一、循環 1.1單層for循環 1.1.1基礎語法 for(初識變量;結束范圍;累加/累減){ 重復執行的代碼 } 1、 先初識化變量$i 2、 $i<100表達式進行判斷 3、 跳入循環&#xff0c;執行重復代碼 4、 累加或者累加 5、 再進行$i<100表達式判斷 6、 再跳入循環&#xff0c;執行重復…