Tengo una aplicación Vue 2 con una variable de estado (una matriz de objetos de cuadro) llamada boxes . Tengo una propiedad calculada que extrae un subconjunto de estos cuadros ( nearest_box_linked_boxes ).
Tengo un método que itera a través de las casillas devueltas por nearest_box_linked_boxes y cambia el valor de una propiedad en cada elemento:
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(); }Este método está devolviendo un error:
vue.esm.js:648 [Vue warn]: Error in v-on handler: "TypeError: Cannot assign to read only property 'object_class' of object '#<Box>'" Nunca hice explícitamente ninguno de los objetos de cuadro (o sus propiedades) de solo lectura. Entiendo que no puedo escribir en el objeto de matriz nearest_box_linked_boxes (el objeto de matriz principal) porque es una propiedad calculada, pero pensé que debería ser posible modificar las propiedades de cada elemento de esta matriz.
¿Me estoy encontrando con un problema causado por Vue y las propiedades calculadas aquí, o algo más?
Siempre debe tratar las propiedades calculadas como "solo lectura", con la excepción de los configuradores calculados.
Si bien es técnicamente posible mutar un objeto devuelto por propiedades calculadas, generalmente es una mala idea. El objeto se reemplazará tan pronto como cambie una dependencia y sus cambios se perderán.
Esto resultó ser mi propio error. La respuesta de Nikola probablemente sea una buena práctica, pero en realidad estaba llamando a Object.freeze en algún momento de mi código y lo había olvidado. Este no fue un efecto secundario de nada relacionado con Vue ni nada realmente misterioso.