vite+vue3.0構建項目

1.安裝vite

npm install vite -g

2.初始化項目

npm init @vitejs/app

根據(jù)提示褪测,初始化好一個項目


微信截圖_20211108165523.png

3.安裝依賴+跑起來

npm install
npm run dev
微信截圖_20211108165757.png

沒錯及塘,只用了421ms就跑起來了抖拴,讓我們看看同樣是新創(chuàng)建的基于vue-cli4的vue3.0項目要跑多久


微信截圖_20211108165942.png

用了2S鐘凑懂,這就是vite的重大優(yōu)勢,而且隨著項目體積的不斷增大虽惭,這個優(yōu)勢會更加明顯橡类。
當然,如果你是vue3.0的初學者芽唇,還是建議先使用vue-cli來構建項目練手顾画,因為vite封裝了更多了api,不適合新手一開始就接觸匆笤。
來講講vue2.0和vue3.0生命周期函數(shù)的改變


微信截圖_20211108173034.png

其中beforeCreate和created被去掉了研侣。在這些鉤子中編寫的任何代碼都應該直接在 setup 函數(shù)中編寫。
這里著重講一下onRenderTracked()和 onRenderTriggered()鉤子函數(shù)的使用
onRenderTracked直譯過來就是狀態(tài)跟蹤疚膊,它會跟蹤頁面上所有響應式變量和方法的狀態(tài)义辕,也就是我們用return返回去的值,它都會跟蹤寓盗。只要頁面有update的情況灌砖,它就會跟蹤,然后生成一個event對象傀蚌,我們通過event對象來查找程序的問題所在基显。
onRenderTracked((event) => {
  console.log("狀態(tài)跟蹤組件----------->");
  console.log(event);
});

onRenderTriggered直譯過來是狀態(tài)觸發(fā),它不會跟蹤每一個值善炫,而是給你變化值的信息撩幽,并且新值和舊值都會給你明確的展示出來。

如果把onRenderTracked比喻成散彈槍箩艺,每個值都進行跟蹤窜醉,那onRenderTriggered就是狙擊槍,只精確跟蹤發(fā)生變化的值艺谆,進行針對性調試榨惰。

onRenderTriggered((event) => {
  console.log("狀態(tài)觸發(fā)組件--------------->");
  console.log(event);
});

對 event 對象屬性的詳細介紹:

- key 那邊變量發(fā)生了變化
- newValue 更新后變量的值
- oldValue 更新前變量的值
- target 目前頁面中的響應變量和函數(shù)

vue2的defineProperty和vue3的proxy

首先來講講defineProperty,它有四個數(shù)據(jù)描述符静汤,大部分人應該都知道琅催,來回顧一下

var person = {
  name:'張三',
  age:20,
  sex:'男'
}
Object.defineProperty(person,'height',{
  value:160,
  enumerable:true, //能否被枚舉
  writable:true,  //能否被修改
  configurable:true  //能否被配置刪除
})

還有兩個存取描述符

Object.defineProperty(person,'height',{
  get(){
    console.log('獲取了height')
  },
  set(value){
    console.log('修改了height,值為'+value)
  }
})

寫個最簡單的數(shù)據(jù)綁定:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  高度:<input type="text" id="input" onkeyup="changeInput()">
  <span id="show"></span>
</body>
<script>
var person = {
  name:'張三',
  age:20,
  sex:'男'
}

Object.defineProperty(person,'height',{
  get(){
    console.log('獲取了height')
  }, 
  set(value){
    console.log('修改了height,值為'+value)
    show.innerHTML = value
  }
})

function changeInput(val){
  person.height = input.value
}
</script>
</html>

此時在輸入框內輸入的數(shù)字就會在旁邊的span標簽內實時顯示居凶。

VUE3內 兩個響應式api: ref()和reactive()

ref:用于基本類型的變量進行響應式,原理也是Object.definepropty()藤抡,也可用于引用對象的響應式侠碧,此時的原理是Proxy()

20c7bab3b46190f980586b041de9fe5.jpg

reactive():只能用于對象類型的響應式數(shù)據(jù)。

vue2有這么一段代碼:

<span v-for="(item) in arrDemo">{{item}}</span>
<button @click="arrDemo[0] = 2">修改</button>

你會發(fā)現(xiàn)頁面并沒有修改缠黍,想要響應式的修改數(shù)組不可以直接更改下標弄兜,而是要選擇使用數(shù)組的原生方法,比如push()之類的嫁佳,這就是Object.definepropty()的弊端之一挨队,而proxy()則沒有這個問題。
再來一段vue2代碼:

<span>{{dataForm}}</span>
<button @click="dataForm.name = 'haha'">修改</button>

沒錯蒿往,也不能響應式的操作對象屬性的添加和刪除盛垦,要監(jiān)測必須使用this.美元符set()或者Vue.set()才可以(this.delete())。
就是因為definepropty的set和get不能監(jiān)聽到對象的添加和刪除瓤漏。
用proxy簡單實現(xiàn)一個響應式的功能:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  height:<input type="text" id="input" onkeyup="changeInput()">
  <span id="show"></span>
  <script>
   


    let person = {
      name:'張三',
      age:18
    }
    let p = new Proxy(person,{
      get(target,tagName){
        console.log('觸發(fā)了get')
        return target[tagName]
      },
      //set能監(jiān)聽到屬性的修改和增加
      set(target,tagName,value){
        console.log('觸發(fā)了set')
        show.innerHTML = value
        target[tagName] = value
      },
      deleteProperty(target,tagName){
        console.log('觸發(fā)了刪除')
        return delete target[tagName]
      }
    })
    function changeInput(){
      console.log(input.value)
      p.height = input.value
    }
  </script>
</body>
</html>

proxy可以直接監(jiān)聽整個對象的屬性變化腾夯,而不是像definepropty那樣只能監(jiān)聽某一個屬性的變化,不需要遞歸遍歷蔬充,性能上就要優(yōu)于后者很多蝶俱。

b065ec5774d407508f1b24b568a1d05.jpg

8d750087fb8644fcce7a93314031ffa.jpg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饥漫,隨后出現(xiàn)的幾起案子榨呆,更是在濱河造成了極大的恐慌,老刑警劉巖庸队,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件积蜻,死亡現(xiàn)場離奇詭異,居然都是意外死亡彻消,警方通過查閱死者的電腦和手機竿拆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宾尚,“玉大人丙笋,你說我怎么就攤上這事』吞” “怎么了御板?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牛郑。 經常有香客問我稳吮,道長,這世上最難降的妖魔是什么井濒? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任灶似,我火速辦了婚禮,結果婚禮上瑞你,老公的妹妹穿的比我還像新娘酪惭。我一直安慰自己,他們只是感情好者甲,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布春感。 她就那樣靜靜地躺著,像睡著了一般虏缸。 火紅的嫁衣襯著肌膚如雪鲫懒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天刽辙,我揣著相機與錄音窥岩,去河邊找鬼。 笑死宰缤,一個胖子當著我的面吹牛颂翼,可吹牛的內容都是我干的。 我是一名探鬼主播慨灭,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼朦乏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氧骤?” 一聲冷哼從身側響起呻疹,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筹陵,沒想到半個月后刽锤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡惶翻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年姑蓝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吕粗。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡纺荧,死狀恐怖,靈堂內的尸體忽然破棺而出颅筋,到底是詐尸還是另有隱情宙暇,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布议泵,位于F島的核電站占贫,受9級特大地震影響,放射性物質發(fā)生泄漏先口。R本人自食惡果不足惜型奥,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一瞳收、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厢汹,春花似錦螟深、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搭综,卻和暖如春垢箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兑巾。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工条获, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像友鼻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锄开,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容