2016-11-29 110 views
9

我有下面的吸氣劑:Vuex吸氣劑不更新

withEarmarks: state => { 
    var count = 0; 
    for (let l of state.laptops) { 
     if (l.earmarks.length > 0) { 
      count++; 
     } 
    } 
    return count; 
} 

而在一個部件,該計算屬性從吸氣劑衍生自:

withEarmarks() { return this.$store.getters.withEarmarks; }, 

返回的值是正確的,直到我改變元素在筆記本電腦陣列中,然後getter不會更新。

+0

你是如何做的'laptops'數組中的變化,可以包含這些代碼。 – Saurabh

+0

@saurabh我已經嘗試了這兩種方式:'state.laptops [index] = laptop;'和'state.laptops [index] = Object.assign({},laptop);' – daninthemix

回答

21

在你的情況下,state.laptops.earmarks是一個數組,你正在操縱它的數組索引state.laptops[index]。 Vue無法對狀態數組上的突變做出反應(按索引)。該文檔提供了2個解決方法是:

// 1. use purpose built vue method: 
Vue.set(state.laptops, index, laptop) 

// 2. splice the value in at an index: 
state.laptops.splice(index, 1, laptop) 

雖然記載,我想一個巨大的霓虹燈該網頁,上面寫着「你會浪費數小時的生產時間,如果你不知道這一點」上發光標誌將是一個很好的補充

你可以閱讀更多關於這個「警告」在這裏:https://vuejs.org/v2/guide/list.html#Caveats