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)
}
}
}