1. 程式人生 > 實用技巧 >vue面試題(3)

vue面試題(3)

1.$nextTick是什麼?

vue實現響應式並不是資料發生變化後dom立即變化,而是按照一定的策略來進行dom更新

nextTick 是在下次 DOM 更新迴圈結束之後執行延遲迴調,在修改資料之後使用nextTick,

則可以在回撥中獲取更新後的 DOM。

2.v-for key的作用

為了給Vue一個提示,以便它能跟蹤每個節點的身份,從而重用和重新排序現有元素,

你需要為每項提供一個唯一 key 屬性。key屬性的型別只能為 string或者number型別。

3.vue如何獲取dom

<div ref="test"></div>

const dom = this.$refs.test

4.assets和static的區別

這兩個都是用來存放專案中所使用的靜態資原始檔。

兩者的區別:

assets中的檔案在執行npm run build的時候會打包,簡單來說就是會被壓縮體積,

程式碼格式化之類的。打包之後也會放到static中。

static中的檔案則不會被打包。

建議:將圖片等未處理的檔案放在assets中,打包減少體積。

而對於第三方引入的一些資原始檔如iconfont.css等可以放在static中,因為這些檔案已經經過處理了。

5.vue初始化頁面閃動問題

使用vue開發時,在vue初始化之前,由於div是不歸vue管的,所以我們寫的程式碼在

還沒有解析的情況下會容易出現花屏現象,看到類似於{{message}}的字樣

首先:在css里加上以下程式碼

[v-cloak] {
    display: none;
}

如果沒有徹底解決問題,則在根元素加上style="display: none;" :style="{display: 'block'}"

但有時新增完畢後仍有部分變數會顯示,這是怎麼回事呢?通過控制檯檢視,

原來是 v-cloak 的display屬性被優先級別高的樣式覆蓋所導致,我的處理方案是新增 !important ,

[v-cloak] {
  display:none !important;
}

6.ajax請求程式碼應該寫在元件的methods中還是vuex的actions中

如果請求來的資料是不是要被其他元件公用,僅僅在請求的元件內使用,就不需要放入vuex 的state裡。

如果被其他地方複用,這個很大機率上是需要的,如果需要,請將請求放入action裡,方便複用。

7.從vuex中獲取的資料能直接更改嗎?

從vuex中取的資料,不能直接更改,需要淺拷貝物件之後更改,否則報錯;

8.vuex中的資料在頁面重新整理後資料消失

用sessionstorage 或者 localstorage 儲存資料

8.怎麼在元件中批量使用Vuex的getter屬性

使用mapGetters輔助函式, 利用物件展開運算子將getter混入computed 物件中

import {mapGetters} from 'vuex'
export default{
    computed:{
        ...mapGetters(['total','discountTotal'])
    }
}

9.mutation和action有什麼區別?

1.action 提交的是 mutation,而不是直接變更狀態。mutation可以直接變更狀態

2.action 可以包含任意非同步操作。mutation只能是同步操作

3.提交方式不同

action 是用this.store.dispatch('ACTION_NAME',data)來提交。

mutation是用this.$store.commit('SET_NUMBER',10)來提交

4.接收引數不同,mutation第一個引數是state,而action第一個引數是context.

10.在v-model上怎麼用Vuex中state的值?

需要通過computed計算屬性來轉換。

<input v-model="message">
// ...
computed: {
    message: {
        get () {
            return this.$store.state.message
        },
        set (value) {
            this.$store.commit('updateMessage', value)
        }
    }
}