Reactividad en Vue: $set y Object.assign
Clase 25 de 53 • Curso Profesional de Vue.js 2
Contenido del curso
CLI y Dev Tools
- 3

Instalación de Vue.js: Node, Dev Tools y CLI
06:13 min - 4

Crear una aplicación Vue con CLI y webpack
12:49 min - 5

Cómo funciona webpack.config.js
10:38 min - 6

Babel: transpilador de JavaScript moderno
05:06 min - 7

ESLint con Standard JS: linteo automático en webpack
15:34 min - 8

Configuración de Sass y Bulma en Vue
06:18 min - 9

Cómo configurar Pug en Vue con webpack
04:23 min - 10
Diseño de Mockups: Práctica y Colaboración en Comunidad
00:20 min - 11
Creación de Vistas con Mockups y Vue.js
00:32 min
Manipulación del DOM
- 12

Expresiones en Vue: sintaxis doble llave
03:49 min - 13

Diferencia entre v-show y v-if en el DOM
06:22 min - 14

Qué es data binding en Vue.js
04:11 min - 15

Computed properties en Vue.js: cómo crearlas
04:13 min - 16

Qué son los watchers de Vue
02:25 min - 17

Eventos Vue: directiva v-on y métodos format
06:12 min - 18

Cómo construir una interfaz de búsqueda completa en Vue
19:03 min - 19
Manipulación del DOM con Vue.js: Práctica y Ejercicios
03:00 min
REST y HTTP
Sistema de Componentes
- 23

Cómo crear componentes en Vue
08:46 min - 24

Componentes Layout en Vue con Bulma
09:50 min - 25

Reactividad en Vue: $set y Object.assign
Viendo ahora - 26

Hooks del ciclo de vida en Vue.js
05:38 min - 27

Comunicación padre-hijo con props en Vue
23:27 min - 28

Eventos en Vue: comunicar hijo a padre
12:04 min - 29

Slots: HTML dinámico en componentes Vue
13:42 min - 30

Plugin Event Bus: comunicar componentes sin relación en Vue
19:19 min
Vue Router
Extendiendo VueJS
Clases, Animaciones y Transiciones36
Vuex
- 39

Cómo Vuex centraliza estados en Vue
03:41 min - 40

Instalación de Vuex con estado único
17:32 min - 41

Cómo usar mutations y commit en Vuex
08:16 min - 42

Getters de Vuex: mapGetters y store sincronizado
07:35 min - 43

Cómo dispatch ejecuta actions asincrónicas en ViewX
07:54 min - 44

Instalación de Viewex en Platzi Music
26:37 min
Nuxt.js
Deploy a Producción con Now
Conclusiones
Bonus
La reactividad en View.js es la base de interfaces dinámicas y rápidas. Aquí entenderás con claridad cómo se rastrean dependencias, cómo se actualiza la vista y cómo resolver las excepciones con this.$set y Object.assign para mantener todo reactivo.
¿Qué es la reactividad en View.js y cómo actualiza la vista?
La reactividad permite que el framework detecte qué cambió y propague esos cambios para actualizar las vistas de forma dinámica. Cuando agregas propiedades en el objeto de la función data, View crea getters y setters para cada una.
- Esto habilita el tracking de dependencias y la notificación cuando cambian.
- Cada componente tiene un watcher (un observable) que monitorea dependencias.
- Al detectar cambios, avisa a la función de render para actualizar en pantalla.
Así se encadenan: data con getters/setters, watcher que observa, y render que pinta los cambios. Resultado: componentes que se actualizan sin intervención manual.
¿Por qué el Virtual DOM mejora la performance al renderizar?
El Virtual DOM es una representación en memoria del DOM. Es clave porque el document object model nativo es costoso al realizar mutaciones. Allí suele estar el cuello de botella de la performance.
- El Virtual DOM minimiza mutaciones sobre el DOM real.
- Compara representaciones y aplica solo los cambios necesarios.
- Así se obtienen mejores tiempos de renderizado y actualización.
En síntesis, la combinación de reactividad y Virtual DOM hace que View sea muy performante al aplicar cambios en la vista.
¿Qué limitaciones tiene la reactividad y cómo solucionarlas con $set y Object.assign?
Hay dos límites importantes a tener en cuenta para evitar “cambios invisibles” que el watcher no detecta:
- data como función: siempre debe ser una función que retorna un objeto. Si fuera un objeto compartido, múltiples instancias usarían el mismo estado y mostrarían la misma información.
- propiedades declaradas al inicializar: toda propiedad que usarás debe declararse desde el inicio, aunque sea con valores por defecto como null, cadena vacía o 0.
Cuando intentas agregar una propiedad nueva a un objeto ya existente (por ejemplo, sumar last name a person), View no la vuelve reactiva si no existía al iniciar. Para resolverlo, tienes dos caminos.
¿Cómo declarar data para estados únicos?
- Usa una función que retorne un objeto nuevo por instancia.
- Declara todas las propiedades que vas a usar, incluso si aún no tienen valor útil.
export default {
data() {
return {
person: { name: 'Ignacio' } // declara aquí lo necesario.
};
}
};
¿Cómo agregar una propiedad reactiva con $set?
Emplea la función del framework this.$set: recibe el objeto, el nombre de la propiedad y su valor. Así la nueva propiedad se vuelve reactiva.
methods: {
addProp() {
// objeto, nombre de la propiedad, valor.
this.$set(this.person, 'lastName', 'Anaya');
}
}
- Ventaja: asegura reactividad al crear propiedades nuevas.
- Uso recomendado para añadir propiedades puntuales.
¿Cómo extender varias propiedades con Object.assign de ECMAScript 2015?
Si necesitas agregar varias propiedades a la vez, crea un objeto nuevo con Object.assign y así fuerzas la reactividad al reemplazar la referencia.
methods: {
addProp() {
this.person = Object.assign({}, this.person, { a: 1, b: 2 });
}
}
- patrón: objeto destino vacío, luego el objeto a extender, y por último lo que incorporas.
- Ventaja: en una línea agregas múltiples propiedades y mantienes reactividad.
¿Tienes dudas sobre algún paso o quieres compartir tu caso? Deja tu comentario y conversemos.