為何我的JavaScript(Vue)程式碼中的物件屬性被標記為唯讀狀態?
P粉464208937
P粉464208937 2023-08-26 22:18:27
0
1
549
<p>我有一個Vue 2應用程序,其中有一個狀態變數(一個包含盒子物件的陣列)叫做<code>boxes</code>。我有一個計算屬性,它從這些盒子中提取一個子集(<code>nearest_box_linked_boxes</code>)。 </p> <p>我有一個方法,它遍歷<code>nearest_box_linked_boxes</code>返回的盒子,並改變每個元素的一個屬性的值:</p> <pre class="brush:php;toolbar:false;">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(); }</pre> <p>這個方法回傳了一個錯誤:</p> <pre class="brush:php;toolbar:false;">vue.esm.js:648 [Vue warn]: Error in v-on handler: "TypeError: Cannot assign to read only property 'object_class' of object '#<Box>'"</pre> <p>我從未明確地將任何盒子物件(或它們的屬性)設為唯讀。我確實知道我不能寫入<code>nearest_box_linked_boxes</code>(父數組物件),因為它是一個計算屬性,但我認為應該可以修改此數組中每個元素的屬性。 </p> <p>我是否遇到了Vue和計算屬性引起的問題,還是其他原因? </p>
P粉464208937
P粉464208937

全部回覆(1)
P粉754477325

您應該始終將計算屬性視為“唯讀”,例外情況是計算屬性的setter。

雖然在技術上可以修改由計算屬性傳回的對象,但這通常是個壞主意。一旦依賴關係發生變化,該物件將被替換,您的變更將遺失。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板