(vue)vue知識點(diǎn)小結(jié)(1)

基礎(chǔ)知識:

vue的生命周期:beforeCreate/created、beforeMount/mounted、beforeUpdate/updated、beforeDestory/destoryed

vue常用指令:v-for、v-bind(縮寫形式:prop)、v-on(縮寫形式@click=’sss')、v-if/v-else/v-else-if、v-model、v-once、v-html、v-show...

vue自定義組件:Vue.component(‘componentName',{ props:[‘p1’,’p2’], template: ‘<li>{{ p1 }}</li>' })

vue常用實(shí)例方法和屬性:data/$data、methods/$methods、$el、computed(計(jì)算屬性)、$watch、$set、$event、$emit...

如果需要更新的屬性需要緩存,則使用計(jì)算屬性的方式,否則可以使用methods里的方法來更新屬性(methods里的方法每次重新渲染都會執(zhí)行)

計(jì)算屬性默認(rèn)提供了getter,你還可以給它設(shè)置setter

當(dāng)你數(shù)據(jù)變化是異步或者開銷較大時(shí),可以使用watch偵聽器來響應(yīng)數(shù)據(jù)的變化

v-bind:class的值可以是一個(gè)對象,可實(shí)現(xiàn)類似react中classnames模塊的功能

自定義組件上的class會被渲染拼接到template的根節(jié)點(diǎn)的class屬性上(自定義組件上可使用v-bind:class來做class的判斷顯示邏輯)

v-bind:style可以用來綁定內(nèi)聯(lián)樣式,這個(gè)內(nèi)聯(lián)樣式的值可以由一個(gè)對象來定義(類似css in js的模式),且可以被定義為數(shù)組(多個(gè)樣式對象)

v-bind:style可以使用多重值的形式:<div :style=“display:[‘-webkit-box’,’-ms-flexbox’, ‘flex']"></div>

v-if/v-else/v-else-if的時(shí)候,可以用key來管理可復(fù)用的元素

v-if是’真正’的渲染,它會確保在切換條件過程中條件塊內(nèi)的元素的事件監(jiān)聽器和子組件適時(shí)的銷毀和重建

v-if是惰性的,初始為假,什么也不做,直到為真的時(shí)候才渲染元素

v-show總是渲染元素,只是簡單的進(jìn)行切換

v-if的切換開銷大,v-show則是初始渲染開銷大,頻繁切換使用v-show,運(yùn)行時(shí)經(jīng)常改變則使用v-if

v-if和v-for一起使用時(shí),v-for的優(yōu)先級更高

v-for可遍歷數(shù)組,第二個(gè)參數(shù)是索引

v-for可遍歷對象,第二個(gè)參數(shù)是key,第三個(gè)參數(shù)是索引

v-for和<template>搭配可減少渲染次數(shù)

v-for和自定義組件使用時(shí),需要使用props來傳遞值

盡可能的為遍歷子元素加上key,獲得渲染優(yōu)化

數(shù)組變異方法:push/pop/unshift/shift/splice/sort/reverse改變原始數(shù)組

數(shù)組非變異方法:filter/concat/slice不改變原始數(shù)組,總是返回新數(shù)組

Vue不能檢測到數(shù)組索引賦值(使用vm.$set解決)和修改length長度賦值(使用splice解決)的情況

Vue不能檢測對象屬性的添加和刪除(使用vm.$set或Object.assign)

is=“todo-item”這種屬性的寫法比較適合DOM模板

事件修飾符,它們可串聯(lián)使用:.stop、.prevent、.capture、.self、.once、.passive(尤其適合移動(dòng)端)

.passive不用同時(shí)和.prevent使用,后者會被忽略

按鍵修飾符:.enter、.tab、.delete、.esc、.space、.up、.down、.left、.right

系統(tǒng)按鍵修飾符:.ctrl、.alt、.shift、.meta(?|?|◆)、.exact(允許精確控制系統(tǒng)修飾符組合鍵觸發(fā))

鼠標(biāo)修飾符:.left、.right、.middle

v-model會忽略表單元素的value、checked、selected,僅僅使用實(shí)例中的數(shù)據(jù)作為數(shù)據(jù)源

表單事件修飾符:.lazy、.number、.trim

組件是可復(fù)用的vue實(shí)例,具有vue實(shí)例大多數(shù)屬性和方法

組件可復(fù)用,每個(gè)組件有獨(dú)立的空間

組件上的data必須是一個(gè)函數(shù),這樣做避免影響了其他組件

通過Vue.component()全局注冊的組件可在其被注冊后的任何通過new Vue()創(chuàng)建的實(shí)例所使用,包含其組件樹中的所有組件

通過插槽<slot>分發(fā)內(nèi)容(其實(shí)就是類似于react的children)

動(dòng)態(tài)組件<component>配合屬性is來實(shí)現(xiàn)

解析DOM模板時(shí)需要注意下可能會有不生效的情況,需要使用is來傳遞組件

Vue組件

全局注冊/局部注冊

局部注冊組件在子組件中不可用

全局注冊的行為必須在根Vue實(shí)例創(chuàng)建之前發(fā)生

camelCase的屬性可以在組件中使用kebab-case

可以以對象的模式指定每一個(gè)props屬性的類型

父級props的更新會向下流動(dòng),反之則不行

由于JavaScript對象和數(shù)組是引用傳入的,所以當(dāng)子組件對props的改變將會影響到父組件

props類型校驗(yàn)可以是原生構(gòu)造對象的中的任意一個(gè),也可以自定義檢驗(yàn)類型,通過instanceof檢查

對于絕大多數(shù)特性來說,外部傳入的值會替換掉組件內(nèi)部設(shè)置好的值,如input的type屬性,但有的屬性則是會進(jìn)行合并,如class

inhertAttrs:false設(shè)置不希望根元素繼承特性,可以使用$attrs屬性來設(shè)置繼承的目標(biāo)元素

v-on在設(shè)置事件監(jiān)聽器時(shí),會把事件名全部轉(zhuǎn)換成小寫,推薦始終使用kebab-case的事件名

v-model可以使用自定義組件中的model屬性自定義

父組件模板的所有東西都會在父級作用域內(nèi)編譯,子組件的所有內(nèi)容都會在子組件作用域內(nèi)編譯

插槽(<slot></slot>)/具名插槽(<slot name=“header"></slot>)/作用域插槽(slot/slot-scope)

<keep-alive>組件可用來緩存被切換后隱藏的組件的狀態(tài)

$root訪問根實(shí)例,$parent訪問父組件實(shí)例(不推薦)

父組件訪問子組件,使用$refs屬性來獲取設(shè)置了ref屬性的子組件

provide屬性允許我們指定要分享給后代組件使用的方法,然后后代組件使用inject屬性來獲得祖先組件分享的方法(依賴注入)

事件偵聽器($emit派發(fā)的事件)

v-on指令偵聽

$on偵聽一個(gè)事件

$once一次性偵聽一個(gè)事件

$off停止偵聽一個(gè)事件

慎用遞歸組件

盡量避免組件的循環(huán)引用

優(yōu)先使用template來定義模板,而不是inline-template

$forceUpdate來強(qiáng)制更新view

組件包含大量靜態(tài)內(nèi)容時(shí),可使用v-once來標(biāo)記,緩存靜態(tài)內(nèi)容

過渡 & 動(dòng)畫

transition組件控制過渡動(dòng)畫,可以給任何元素和組件添加進(jìn)入/離開過渡

當(dāng)插入或刪除transition中的元素時(shí),vue會做如下處理

自動(dòng)嗅探元素是否使用了css過渡和動(dòng)畫,適當(dāng)時(shí)機(jī)添加/刪除類名

元素的鉤子函數(shù)會在適當(dāng)時(shí)機(jī)被調(diào)用

元素既沒有鉤子函數(shù)也沒有css動(dòng)畫,插入和刪除操作在下一幀立即執(zhí)行(瀏覽器逐幀動(dòng)畫機(jī)制)

過渡的類名

v-enter/v-enter-active/v-enter-to

v-leave/v-leave-active/v-leave-to

css動(dòng)畫用法同css過渡,區(qū)別是類名v-enter不會在DOM插入后立即刪除,而是在animationend事件觸發(fā)時(shí)刪除

自定義過渡類名,使用以下屬性指定:

enter-class/enter-active-class/enter-to-class

leave-class/leave-active-class/leave-to-class

自定義類名優(yōu)先級高于普通的類名

使用type屬性設(shè)置transition或animation來申明vue使用的動(dòng)畫類型

transition組件上使用duration來設(shè)置動(dòng)畫執(zhí)行的時(shí)間

可以使用鉤子函數(shù)

beforeEnter/enter/afterEnter/enterCancelled

beforeLeave/leave/afterLeave/leaveCancelled

鉤子函數(shù)使用v-on指令綁定

鉤子和結(jié)合過渡和動(dòng)畫使用,也可以單獨(dú)使用

在enter/leave中,必須使用done()來進(jìn)行回調(diào),否則會同步調(diào)用,過渡或動(dòng)畫會立即完成

對于純使用JavaScript來進(jìn)行的動(dòng)畫,推薦使用v-bind:css=“false”來取消css的檢測,減少css的影響

可使用apear設(shè)置初始渲染的過渡

apear/apear-active/apear-to

beforeApear/apear/afterApear/apearCancelled

多元素過渡,設(shè)置唯一key

過渡模式:

In-out新元素先過渡,完成后當(dāng)前元素過渡離開

out-in當(dāng)前元素先過渡,完成后新元素過渡進(jìn)入

默認(rèn)行為:進(jìn)入和離開同時(shí)發(fā)生

多個(gè)組件過渡使用動(dòng)態(tài)組件實(shí)現(xiàn)

列表過渡<transition-group>

以真實(shí)元素呈現(xiàn),默認(rèn)為<span>,可使用tag更改呈現(xiàn)標(biāo)簽

過渡模式不可用

內(nèi)部需要唯一key

列表排序過渡,使用的是FLIP動(dòng)畫,使用類名v-move來定義class

可復(fù)用性 & 組合

mixins混入屬性發(fā)生沖突時(shí),以組件數(shù)據(jù)優(yōu)先(一層屬性深度淺合并)

mixins混入方法發(fā)生沖突時(shí),會將函數(shù)合并為一個(gè)數(shù)組,優(yōu)先執(zhí)行混入方法,其次執(zhí)行組件方法

Vue.extend策略和mixins相同

慎用全局混入

合并策略可以自定義(參考vuex的具體實(shí)現(xiàn):Vue.config.optionMergeStrategies)

全局自定義指令:Vue.directive()

局部自定義指令:屬性directives,類型為Object

鉤子函數(shù)

bind指令第一次綁定到元素時(shí)調(diào)用,只執(zhí)行一次,可用于一次性初始化設(shè)置

inserted元素插入父節(jié)點(diǎn)時(shí)調(diào)用

update所有VNode更新時(shí)調(diào)用,可能發(fā)生在子VNode之前

componentUpdated指令所在組件在VNode和其子VNode更新后調(diào)用

unbind指令與元素解綁時(shí)調(diào)用

鉤子函數(shù)都會被傳入以下參數(shù):

el指令綁定元素,可操作DOM

binding指令描述對象

vnodeVue生成的虛擬節(jié)點(diǎn)

oldVnode上一個(gè)Vnode,僅在update和componentUpdated中使用

指令接受所有合法的JavaScript表達(dá)式

渲染函數(shù) & JSX

render函數(shù)接受createElement方法作為參數(shù)

createElement方法的作用是創(chuàng)建一個(gè)虛擬節(jié)點(diǎn)(VNode)

createElement參數(shù)比較復(fù)雜,參照官網(wǎng):參數(shù)

組件樹中的VNodes必須唯一

render中的v-if/v-for可以使用if/else和map重寫

插槽使用this.$slot.default訪問,作用域插槽使用this.$scopeSlots.default訪問和設(shè)置

可以使用插件babel-plugin-transform-vue-jsx支持JSX語法

將h作為createElement的別名是Vue生態(tài)的一個(gè)慣例,也是JSX要求的

函數(shù)式組件 關(guān)鍵詞:functional

函數(shù)式組件渲染開銷低,但相應(yīng)的,它不會出現(xiàn)在Vue devtools的組件樹里邊

函數(shù)式組件要求你自己實(shí)現(xiàn)同名特性的替換與智能合并

Vue的模板實(shí)際編譯成了render方法實(shí)現(xiàn)的VNode,可以使用Vue.compile()方法來輸出編譯結(jié)果

插件

插件會為vue提供全局的功能,包括但不限于以下幾種:

添加全局的屬性或方法,如vue-custom-element

添加全局的資源(指令、過濾器、過渡等),如:vue-touch

通過全局mixins添加一些組件選項(xiàng),如:vue-router

添加Vue實(shí)例方法,通過添加到Vue.prototype上實(shí)現(xiàn)

一個(gè)獨(dú)立的庫,同時(shí)有自己的API,又實(shí)現(xiàn)以上部分功能,如:vue-router

Vue插件有一個(gè)公開的方法install,第一個(gè)參數(shù)是Vue構(gòu)造器,第二個(gè)參數(shù)是一個(gè)可選對象。

插件的使用通過全局方法Vue.use(MyPlugin)使用,只會注冊一次插件

在CommonJS中,應(yīng)該始終顯式的調(diào)用Vue.use方法

社區(qū)插件列表awesome-vue

過濾器

{{ msg | filter }}

<div v-bind=“msg | filter"></div>

全局過濾器使用Vue.filter()創(chuàng)建

局部過濾器使用對象屬性filters創(chuàng)建

過濾器函數(shù)總是接收表達(dá)式的值作為第一個(gè)參數(shù),過濾器可以有多個(gè),值依次向后傳遞

過濾器可以接收額外的參數(shù)

構(gòu)建 & 部署

<script>標(biāo)簽引入[vue.min.js](https://vuejs.org/js/vue.min.js)

使用vue-cli

webpack + vue-loader

browserify + vueify

rollup + rollup-plugin-vue

利用鉤子函數(shù)Vue.config.errorHandler定義配置來跟蹤運(yùn)行時(shí)錯(cuò)誤,可以搭配[Sentry](https://sentry.io/)使用(集成配置

單文件組件(.vue文件)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # 傳智播客vue 學(xué)習(xí)## 1. 什么是 Vue.js* Vue 開發(fā)手機(jī) APP 需要借助于 Weex* Vu...
    再見天才閱讀 3,800評論 0 6
  • 相關(guān)概念 混合開發(fā)和前后端分離 混合開發(fā)(服務(wù)器端渲染) 前后端分離后端提供接口,前端開發(fā)界面效果(專注于用戶的交...
    他愛在黑暗中漫游閱讀 3,022評論 4 45
  • 《復(fù)活》是2005年的時(shí)候打算看的書,那個(gè)時(shí)候還在上初中,當(dāng)時(shí)看了幾頁之后就沒有在看了。那個(gè)時(shí)候完全沒有看書的心思...
    wokenshin閱讀 1,025評論 1 0
  • 對于自己負(fù)面的情緒,想法,或觀念,不要再用道德綁架自己,不用去反省是不是不該這樣想,在精神世界里完全接納它們,它們...
    我的第一輩子閱讀 280評論 0 0
  • edenmandom 隨譯 ⊕ 做你喜歡的,叫“自由”。 喜歡在做的,叫“快樂”。 ⊕ 我寧願(yuàn)喜歡冒險(xiǎn)的“自由...
    黑貓子閱讀 384評論 0 0

友情鏈接更多精彩內(nèi)容