我有一個Vue 2應用程式,它有一個名為boxes的狀態變數(一個盒子物件陣列)。我有一個計算屬性,它提取了這些盒子的一個子集(nearest_box_linked_boxes)。
我有一個方法,它通過nearest_box_linked_boxes回傳的盒子進行迭代,并改變每個元素中的一個屬性的值:
for(let i=0; i<this. nearest_box_linked_boxes.length;i )
{
let box = this.nearest_box_linked_boxes[i] 。
box.object_class = this.$store.state.selected_object_class。
box.patch()。
這個方法正在回傳一個錯誤:
這個方法正在回傳一個錯誤。
vue.esm.js:648 [Vue warn]。Error in v-on handler: "TypeError: 不能分配給物件'#<Box>'的只讀屬性'object_class'"/span>
我從未明確地讓任何一個盒子物件(或其屬性)成為只讀。我知道我不能寫入nearest_box_linked_boxes(父陣列物件),因為它是一個計算屬性,但我認為應該可以修改這個陣列中每個元素的屬性。
我是否遇到了由Vue和計算屬性引起的問題,還是其他什么原因?
uj5u.com熱心網友回復:
你應該始終將計算的屬性視為 "只讀",計算的設定器是個例外。
雖然從技術上來說,我們可以修改由計算屬性回傳的物件,但這通常是個壞主意。一旦依賴關系發生變化,該物件就會被替換,而你的變化就會丟失。
uj5u.com熱心網友回復:
事實證明這是我自己的錯誤。Nikola的回答可能是很好的做法,但我實際上是在我的代碼中的某個地方呼叫了Object.freeze,而我卻忘記了。這并不是與 Vue 有關的副作用,也不是什么真正神秘的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/310020.html
標籤:
上一篇:我如何正確地動態匯入多個組件并在Nuxt中使用它們?
下一篇:改變Vuetify表頭的風格
