Warum sind Objekteigenschaften in meinem JavaScript-Code (Vue) als schreibgeschützt markiert?
P粉464208937
P粉464208937 2023-08-26 22:18:27
0
1
569
<p>Ich habe eine Vue 2-Anwendung, die eine Statusvariable (ein Array mit Box-Objekten) namens <code>boxes</code> hat. Ich habe eine berechnete Eigenschaft, die eine Teilmenge dieser Boxen extrahiert (<code>nearest_box_linked_boxes</code>). </p> <p>Ich habe eine Methode, die die von <code>nearest_box_linked_boxes</code> zurückgegebenen Boxen durchläuft und den Wert eines Attributs für jedes Element ändert: </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>Diese Methode hat einen Fehler zurückgegeben: </p> <pre class="brush:php;toolbar:false;">vue.esm.js:648 [Vue-Warnung]: Fehler im v-on-Handler: "TypeError: Die schreibgeschützte Eigenschaft „object_class“ von kann nicht zugewiesen werden Objekt '#<Box>'"</pre> <p>Ich habe nie explizit Boxobjekte (oder deren Eigenschaften) schreibgeschützt gemacht. Ich weiß, dass ich nicht in <code>nearest_box_linked_boxes</code> (das übergeordnete Array-Objekt) schreiben kann, da es sich um eine berechnete Eigenschaft handelt, aber ich denke, es sollte möglich sein, die Eigenschaften jedes Elements in diesem Array zu ändern. </p> <p>Habe ich ein Problem, das durch Vue und berechnete Eigenschaften verursacht wird, oder liegt es an etwas anderem? </p>
P粉464208937
P粉464208937

Antworte allen(1)
P粉754477325

您应该始终将计算属性视为“只读”,例外情况是计算属性的setter。

虽然在技术上可以修改由计算属性返回的对象,但这通常是一个坏主意。一旦依赖关系发生变化,该对象将被替换,您的更改将丢失。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage