vue2.0題目

1 .v-show和v-if的區(qū)別

  • v-show 通過css display 控制顯示和隱藏
  • v-if 組件真正的渲染和銷毀,而不是顯示和隱藏
  • 頻繁的切換使用v-show

為何在v-for中用key

  • 必須使用key,切不能是index和random
  • diff算法中通過tag和key來判斷,是否是saneNode
  • 減少渲染次數(shù),提升渲染性能

vue的生命周期

單組件生命周期

父子組件生命周期

  1. 加載渲染過程
    父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
  2. 子組件更新過程
    父beforeUpdate->子beforeUpdate->子updated->父updated
  3. 父組件更新過程
    父beforeUpdate->父updated
  4. 銷毀過程
    父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
    轉(zhuǎn)載 https://www.cnblogs.com/status404/p/8733629.html

組件如何通訊

  • 父子組件propsthis.$emit
  • 自定義事件 event.$no event.$off event.$emit
  • vuex 所有組件傳遞信息

組件渲染和更新的過程

組件渲染和更新的過程.png

雙向數(shù)據(jù)綁定 v-model 實現(xiàn)原理

  • input 元素的 value= this.name
  • 綁定 input 事件 this.name=$event.target.value
  • data 更新觸發(fā) re-render

computed 特點

  • 緩存,data不變,不會重新計算
  • 提高性能

為何組件的data必須是一個函數(shù)

vue編譯后實際上一個class類,用的時候相當(dāng)于實例化,實例化data在閉包里

ajax請求應(yīng)該放在哪個周期里?

  • mounted里,渲染完成后出發(fā)請求
  • js是單線程,ajax異步獲取數(shù)據(jù)
  • 放在mounted之前沒有用,只會讓邏輯更加混亂

如何將組件所有props傳遞給子組件(優(yōu)先級不高)

  • $props
  • <User v-bind="$props" />

如何自己實現(xiàn)v-model

<template>
  <input type="text" :value="$emit('change',$emit.target.value)">
  <!-- change 和 model.event 對應(yīng)起來即可 -->
</template>
<script>
export default {
  model:{
    props:"text",//對應(yīng)到props 的text
    event:'change'
  },
  props:{
    text:String
  }
}
</script>

多個組件相同邏輯,如何處理

  • mixin
    *mixin的一些確定

何時使用異步組件

  • 加載大組件
  • 路由異步加載

何時使用keep-alive

  • 緩存組件,不需要重讀渲染
  • 多個靜態(tài)tab頁的切換
  • 優(yōu)化性能

何時使用beforeDestory

  • 解除自定義事件 event.$off
  • 清除定時器
  • 解綁自定義的DOM事件,如window.scroll

什么是作用域插槽

<template>
  <a :href='url'> 
    <slot :website="website">
      {{website.subTitle}}
    </slot>
  </a>
</template>
<script>
export default {
  props:['url'],
  data(){
    return {
      website:{
        url:'www.baidu.com',
        title:"百度",
        subTitle:"貼吧"
      }
    }
  }
}
</script>
<template>
  <ScopedSlotDemo :url='website.url'>
    <template v-slot='slotProps'>
      <!-- slotProps 名字可自定義 -->
      {{slotProps.website.title}}
    </template>
  </ScopedSlotDemo>
</template>

vuex 中 action和 mutation 有何區(qū)別?

  • action可以處理異步,mutation 不可以
  • mutation 做原子操作
  • action可以整合多個 mutation

vue-router 常用路由模式

  • hash 默認(rèn)
  • h5 history 需服務(wù)端支持
  • 比較

如何配置vue-router 異步加載

export default new Router({
  routers:[
    {
      path:'/',
      component:()=>import('./../components/Navigator')
    },
    {
      path:'/feedback',
      component:()=>import('./../components/feedback')
    },
  ]
})

請用vnode描述一個DOM解構(gòu)

  <div id='div1' class='container'>
    <p>vdom</p>
    <ul style='font-size:20px'>
      <li>a</li>
    </ul>
  </div>
{
  tag:'div',
  props:{
    className:'container',
    id:'div1'
  },
  children:[
    {
      tag:'p',
      children:'vdom'
    },
    {
      tag:'ul',
      props:{style:'font-size:20px'},
      children:[{
        tag:'li',
        children:'a'
      }]
    }
  ]
}

監(jiān)聽data的核心api Object.defineProperty

  • 深度監(jiān)聽,監(jiān)聽數(shù)組
  • 優(yōu)缺點

vue如何監(jiān)聽數(shù)組變化

  • Object.defineProperty 不能監(jiān)聽數(shù)組變化
  • 重新定義原型,重寫push pop 等方法,實現(xiàn)監(jiān)聽
  • proxy 可以原生支持監(jiān)聽數(shù)組變化

請描述響應(yīng)式原理

  • 監(jiān)聽data變化
  • 組件渲染和更新過程

地方法算法的時間復(fù)雜度

  • O(n)
  • 在O(n^3)(n的三次方)上做了調(diào)整
    只比較同一層級,如何tag相同,則直接銷毀重建,
    通過tag和key判斷是不是同一個組件,如果是同一個組件,則不重復(fù)對比,使它的復(fù)雜度從n的三次方減到n

簡述diff算法過程

  • patch(elem,vnode) 和patch(vnode,newNode)
  • patchVnode 和addVnodes 和removeVnodes
  • updateChildren ,key的重要性(通過key判斷是否同一個節(jié)點)

vue為何是異步渲染,$nextTick 何用?

  • 異步渲染(以及合并data修改),以提高渲染性能
  • $nextTick 在dom更新完以后,觸發(fā)回調(diào)

vue常見性能優(yōu)化方法

  • 合理使用v-show ,v-if
  • 合理使用computed
  • v-for 加上key ,以及避免和v-if同時使用(v-for優(yōu)先級高,每次v-for時,都要計算v-if)
  • 自定義事件,DOM事件及時銷毀
  • 合理使用異步組件
  • 合理使用keep-alive
  • data 層級不要太深 (深度監(jiān)聽一次完成,計算次數(shù)多)
  • 使用vue-loader在開發(fā)環(huán)境做預(yù)編譯
  • webpack 層面的優(yōu)化
  • 前端通用的性能優(yōu)化.如圖片懶加載
  • 使用SSR(nuxt)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塑崖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禀忆,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哈踱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梨熙,“玉大人嚣鄙,你說我怎么就攤上這事〈幔” “怎么了哑子?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵舅列,是天一觀的道長。 經(jīng)常有香客問我卧蜓,道長帐要,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任弥奸,我火速辦了婚禮榨惠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盛霎。我一直安慰自己赠橙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布愤炸。 她就那樣靜靜地躺著期揪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪规个。 梳的紋絲不亂的頭發(fā)上凤薛,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音诞仓,去河邊找鬼缤苫。 笑死,一個胖子當(dāng)著我的面吹牛墅拭,可吹牛的內(nèi)容都是我干的活玲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谍婉,長吁一口氣:“原來是場噩夢啊……” “哼翼虫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屡萤,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤珍剑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后死陆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體招拙,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年措译,在試婚紗的時候發(fā)現(xiàn)自己被綠了别凤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡领虹,死狀恐怖规哪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塌衰,我是刑警寧澤诉稍,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布蝠嘉,位于F島的核電站,受9級特大地震影響杯巨,放射性物質(zhì)發(fā)生泄漏蚤告。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一服爷、第九天 我趴在偏房一處隱蔽的房頂上張望杜恰。 院中可真熱鬧,春花似錦仍源、人聲如沸心褐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗爹。三九已至,卻和暖如春戳表,著一層夾襖步出監(jiān)牢的瞬間桶至,已是汗流浹背昼伴。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工匾旭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人圃郊。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓价涝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親持舆。 傳聞我的和親對象是個殘疾皇子色瘩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355