欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于VUE的面試題(小結(jié))

  發(fā)布時(shí)間:2020-01-16 16:48:56   作者:福星星   我要評論
這篇文章主要介紹了關(guān)于VUE的面試題(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、生命周期

鉤子函數(shù):

  • beforeCreate
  • created:此時(shí)首次可以使用data和methods
  • beforeMount:模板在內(nèi)存中
  • mounted:DOM渲染在頁面中,可以訪問DOM結(jié)構(gòu)

二、computed、getter、setter

  • computed:處理復(fù)雜的聲明式邏輯
  • getter:computed的默認(rèn)屬性,用于讀值
  • setter:設(shè)值屬性
//html中
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>


//js中
data: {
    message: 'Hello'
},
computed: {
    // 計(jì)算屬性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 實(shí)例
      return this.message.split('').reverse().join('')
    }
    
    //getter為默認(rèn)屬性,一般默認(rèn)省略getter,完整寫法:
    reversedMessage: {
        get() {
            return this.message.split('').reverse().join('')
        },
        set(newValue) {
            this.message = newValue
        }
    }
}

//結(jié)果
Original message: "Hello"
Computed reversed message: "olleH"

運(yùn)行vm.message = 'goodbye',setter會(huì)被調(diào)用,message會(huì)被更新

Q1. computed vs methods

methods: {
  reversedMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

computed可以實(shí)現(xiàn)的結(jié)果看似用methods也可以實(shí)現(xiàn),二者的區(qū)別在于:計(jì)算屬性(computed)是基于它們的響應(yīng)式依賴進(jìn)行緩存的,只在相關(guān)響應(yīng)式依賴發(fā)生改變時(shí)它們才會(huì)重新求值;相比之下,每次觸發(fā)重新渲染都會(huì)使得調(diào)用方法(methods)再次執(zhí)行函數(shù)。

Q2. computed vs watch

watch是VUE實(shí)例上監(jiān)聽響應(yīng)數(shù)據(jù)變動(dòng)的屬性,當(dāng)數(shù)據(jù)發(fā)生變化時(shí)做出相應(yīng)的變化。

data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
},
//使用watch
watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
}
//使用computed
computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }

可以看出使用watch,當(dāng)一個(gè)數(shù)據(jù)的變化受多個(gè)數(shù)據(jù)影響的時(shí)候,命令式會(huì)變得重復(fù),這個(gè)時(shí)候很容易造成濫用watch。watch更適合于在數(shù)據(jù)變化時(shí)執(zhí)行異步或者開銷較大的操作時(shí)。

  • watch擅長處理的場景:一個(gè)數(shù)據(jù)影響多個(gè)數(shù)據(jù)
  • computed擅長處理的場景:一個(gè)數(shù)據(jù)受多個(gè)數(shù)據(jù)影響

三、watch監(jiān)聽對象內(nèi)部變化

  • 只是監(jiān)聽Obj內(nèi)的某一屬性:直接用obj.key進(jìn)行監(jiān)聽
  • 對整個(gè)obj深層監(jiān)聽
data: {
    a: 100,
    b: {
        value: 1,
        type: 2
    }
}

watch: {
    //普通監(jiān)聽
    a(newval, oldval){
        console.log("new-a:"+newval+',old-a:'+oldval);
    }
    b(val, oldVal){
        console.log("b.value: "+val.value, oldVal.value);
     },
    
    
    //監(jiān)聽整個(gè)obj,深層監(jiān)聽
    b:{
        handler(val, oldVal){
            console.log("b.value: "+val.value, oldVal.value);
        },
        deep:true
        immediate: true
     },
     
    //監(jiān)聽Obj中的屬性,obj.key
    'b.value': {
        handler(val,oldVal){
          console.log("b.value: "+val, oldVal);
        }
    },

}

  • handler:監(jiān)聽數(shù)組或?qū)ο髸r(shí)候用到的方法,深層監(jiān)聽。只要obj中有屬性值變化就進(jìn)行監(jiān)聽但不知道具體是哪個(gè)屬性值變化。
  • deep:默認(rèn)值是false,true發(fā)現(xiàn)對象內(nèi)部值的變化即深層監(jiān)聽,(監(jiān)聽數(shù)組的變動(dòng)不需要這么做)。
  • immediate:立即以表達(dá)式的當(dāng)前值觸發(fā)回調(diào)。true代表如果在 wacth里聲明了之后,就會(huì)立即先去執(zhí)行里面的handler方法,false就跟我們以前的效果一樣,在數(shù)據(jù)變化的時(shí)候才執(zhí)行,不會(huì)在綁定的時(shí)候就執(zhí)行。

Q1:監(jiān)聽對象中某一屬性值變化

  • 監(jiān)聽obj.key
  • 利用computed作為中間層,監(jiān)聽computed計(jì)算得到的值,就可以只監(jiān)聽對象中的某一屬性變化從而做出相應(yīng)操作
computed: {
    newvalue(){
        return this.b.value
    }
},
watch: {
    newvalue(val, oldVal){
        console.log("b.value: "+val, oldVal);   
     },
}
 

Q2:深層監(jiān)聽的理解

監(jiān)聽器會(huì)一層層的往下遍歷給對象的所有屬性都加上了這個(gè)監(jiān)聽器

四、v-for中key的作用

key的作用是"唯一標(biāo)識(shí)" ,可以標(biāo)志組件的唯一性,可以更高效的更新虛擬DOM。

vue的dom渲染是虛擬dom,數(shù)據(jù)發(fā)生變化時(shí),diff算法會(huì)只比較更改的部分,如果數(shù)據(jù)項(xiàng)的順序被改變,Vue將不是移動(dòng)DOM元素來匹配數(shù)據(jù)項(xiàng)的改變,而是簡單復(fù)用此處每個(gè)元素。

加上key值后,當(dāng)VUE節(jié)點(diǎn)發(fā)生變化的時(shí)候可以通過key值來識(shí)別相同的節(jié)點(diǎn),更高效率更新DOM。

參考可見:http://www.dbjr.com.cn/article/178628.htm

五、$nextTick的作用

在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個(gè)方法,獲取更新后的 DOM。

解決的問題:有些時(shí)候在改變數(shù)據(jù)后立即要對dom進(jìn)行操作,此時(shí)獲取到的dom仍是獲取到的是數(shù)據(jù)刷新前的dom,無法滿足需要,這個(gè)時(shí)候就用到了$nextTick。

// 修改數(shù)據(jù)
vm.msg = 'Hello'
// DOM 還沒有更新
Vue.nextTick(function () {
  // DOM 更新了
})

六、$set

如果在實(shí)例創(chuàng)建之后添加新的屬性到實(shí)例上,它不會(huì)觸發(fā)視圖更新。Vue 不允許在已經(jīng)創(chuàng)建的實(shí)例上動(dòng)態(tài)添加新的根級響應(yīng)式屬性。
使用 Vue.set(object, key, value)方法將響應(yīng)屬性添加響應(yīng)式對象,并確保這個(gè)新屬性同樣是響應(yīng)式的,且觸發(fā)視圖更新。

解決:在vue中對一個(gè)對象內(nèi)部進(jìn)行一些修改時(shí),vue沒有監(jiān)聽到變化無法觸發(fā)視圖的更新,此時(shí)來使用$set來觸發(fā)更新,使視圖更新為最新的數(shù)據(jù)。

【響應(yīng)式:只有當(dāng)實(shí)例被創(chuàng)建時(shí)中存在的屬性才是響應(yīng)式的,或者說在data中存在的才能響應(yīng)。
原因:由于 Vue 會(huì)在初始化實(shí)例時(shí)對屬性執(zhí)行 getter/setter 轉(zhuǎn)化,所以屬性必須在 data 對象上存在才能讓 Vue 將它轉(zhuǎn)換為響應(yīng)式的?!?/p>

<template>
  <div>
 <p @click="addb(a)">{{a.b}}</p>
 <p @click="addc(a)">{{a.c}}</p>
  </div>
</template>
<script>
export default {
  data(){
    return {
      a: {
          b: 1
         },
    }
  },
  methods: {
    addb(a) {
       a.b = a.b + 1;
    },
    addc(a) {
        a.c = a.c + 1;
        console.log(a.c)
     },
  },
  mounted() {
    this.a.c = 200   //{{a.c}}不能主動(dòng)觸發(fā)視圖更新故無法被渲染出來,當(dāng)下一次視圖更新時(shí)才出現(xiàn)
    this.$set(this.a, 'c' ,200)   //觸發(fā)視圖更新,{{a.c}}被渲染
  }
}
</scirpt>
  • this.a.c = 200:點(diǎn)擊b的數(shù)字才可以觸發(fā)視圖刷新,點(diǎn)擊c的數(shù)字console.log出來的c是變化的,但是視圖未更新還是原來的c
  • this.$set(this.a, 'c' ,'200'):點(diǎn)擊c視圖變化,是最新的c

七、組件間的傳值

  • props:父傳子
  • $emit:子傳父
  • eventbus:兄弟組件間
  • vuex:
  • $parent / $children / ref:
  • provide / inject:
  • Vue.observable:
  • $attrs:
  • $listeners:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js的高級面試題(附答案)

    這篇文章主要介紹了Vue.js的高級面試題(附答案),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2020-01-13
  • 12道vue高頻原理面試題,你能答出幾道

    這篇文章主要介紹了12道vue高頻原理面試題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-12-27
  • Vuex面試題匯總(推薦)

    這篇文章主要介紹了Vuex面試題匯總(推薦),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-15
  • web前端面試中關(guān)于VUE的面試題(含答案)

    這篇文章主要介紹了web前端面試中關(guān)于VUE的面試題(含答案),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來
    2019-11-08
  • 面試必備的13道可以舉一反三的Vue面試題

    這篇文章主要介紹了面試必備的13道可以舉一反三的Vue面試題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來
    2019-08-05
  • 你要的Vue面試題都在這里

    這篇文章主要介紹了Vue面試題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-07-01
  • Vue 高頻基礎(chǔ)面試題

    這篇文章主要介紹了Vue 高頻基礎(chǔ)面試題,在前端面試中經(jīng)常會(huì)遇到,今天小編特意整理分享到腳本之家平臺(tái),需要的朋友可以參考下
    2020-02-12

最新評論