Vue.js es conocido por su capacidad de manejar la reactividad de los datos de manera eficiente. Esto significa que cuando los datos cambian, la interfaz de usuario se actualiza automáticamente para reflejar esos cambios.
Sistema Reactivo en Vue.js
Contador Reactivo
El contador es: {{ counter }}
El sistema reactivo de Vue.js se basa en la capacidad de Vue de rastrear cambios en los datos y actualizar automáticamente el DOM para reflejar esos cambios. Vamos a desglosar cómo funciona esto en el ejemplo.
dataLa opción data en la instancia de Vue define el estado inicial del componente. En este ejemplo, data devuelve un objeto que contiene una propiedad counter inicializada en 0.
data() {
return {
counter: 0
};
}
Utilizamos la interpolación {{ counter }} en el HTML para mostrar el valor actual de counter. Vue se encarga de actualizar esta parte del DOM cada vez que counter cambia.
El contador es: {{ counter }}
El objeto methods contiene funciones que pueden modificar el estado del componente. En este ejemplo, tenemos un método incrementCounter que incrementa el valor de counter.
methods: {
incrementCounter() {
this.counter++;
}
}
Utilizamos la directiva v-on (o el atajo @) para escuchar eventos del DOM y ejecutar métodos en respuesta. Aquí, estamos escuchando el evento click del botón y llamando al método incrementCounter cuando el botón es clicado.
Inicialización de Datos: Cuando la instancia de Vue se crea, Vue convierte todas las propiedades del objeto data en propiedades reactivas utilizando Object.defineProperty. Esto permite que Vue «escuche» los cambios en estas propiedades.
Renderización Inicial: Vue renderiza el DOM basándose en el estado inicial definido en data.
Actualización Reactiva: Cuando el valor de counter cambia (por ejemplo, al llamar a this.counter++), Vue detecta el cambio y vuelve a renderizar la parte del DOM que depende de counter.
Manejo de Eventos: Los eventos del DOM (como click) pueden ser manejados para cambiar el estado del componente. Estos cambios son automáticamente reflejados en la interfaz de usuario gracias al sistema reactivo de Vue.
data en propiedades reactivas que actualizan automáticamente el DOM cuando cambian.{{ }} para mostrar datos reactivos en el HTML.v-on (o @) para escuchar eventos del DOM y ejecutar métodos en respuesta.El data binding es una característica de Vue.js que nos permite enlazar datos de manera eficiente entre el modelo y la vista. Vue.js soporta tanto el one-way data binding (enlace de datos unidireccional) como el two-way data binding (enlace de datos bidireccional).
Data Binding en Vue.js
{{ title }}
{{ message }}
Enlace de atributo: Pasa el ratón por aquí
Enlace de clase:
Este texto tiene una clase activa
El one-way data binding permite mostrar datos del componente en la vista. Esto significa que cualquier cambio en el modelo de datos se refleja en la vista, pero no al revés.
Interpolación: Utilizamos la sintaxis {{ }} para enlazar datos de manera unidireccional y mostrar valores en el HTML.
{{ title }}
{{ message }}
2. Atributos HTML: Utilizamos v-bind (o su atajo :) para enlazar datos a atributos HTML.
Enlace de atributo: Pasa el ratón por aquí
3. Clases: Utilizamos v-bind:class para enlazar datos a clases CSS dinámicamente.
Enlace de clase:
Este texto tiene una clase activa
El two-way data binding permite sincronizar los datos entre el modelo y la vista. Esto significa que cualquier cambio en el input del usuario se refleja en el modelo de datos y viceversa.
v-model: Utilizamos v-model para enlazar el valor de un input con una propiedad del componente.
Los métodos nos permiten cambiar los datos en respuesta a eventos del usuario. En este ejemplo, utilizamos un método toggleActive para alternar el valor de isActive cuando se hace clic en un botón.
methods: {
toggleActive() {
this.isActive = !this.isActive; // Método para alternar la clase activa
}
}
Utilizamos la directiva v-on (o su atajo @) para escuchar eventos del DOM y ejecutar métodos en respuesta.
{{ }} para interpolación y v-bind (o :) para enlazar atributos y clases de manera unidireccional. Esto refleja los cambios del modelo en la vista.v-model para sincronizar los datos entre el modelo y la vista, permitiendo que los cambios en los inputs del usuario se reflejen automáticamente en el modelo de datos.v-on (o @) para escuchar eventos del DOM y ejecutar métodos en respuesta.Estas herramientas nos permiten manejar y reaccionar a cambios en los datos de manera más eficiente y controlada.
Watchers y Computed Properties en Vue.js
Computed Properties y Watchers
Nombre Completo (Computed): {{ fullName }}
Contador: {{ counter }}
Estado del Contador (Watched): {{ counterStatus }}
Las computed properties (propiedades calculadas) son propiedades que se calculan en función de otras propiedades. Son útiles cuando necesitamos realizar cálculos basados en los datos del componente y queremos que esos cálculos se actualicen automáticamente cuando los datos cambian. Las computed properties se almacenan en caché en función de sus dependencias reactivas y solo se vuelven a calcular cuando alguna de esas dependencias cambia.
Definición de fullName:
fullName es una computed property que concatena firstName y lastName.
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
2. Uso de fullName:
fullName se utiliza en el HTML para mostrar el nombre completo del usuario, que se actualiza automáticamente cuando firstName o lastName cambian.
Nombre Completo (Computed): {{ fullName }}
Los watchers nos permiten observar y reaccionar a cambios en las propiedades reactivas de Vue.js. Son útiles cuando necesitamos ejecutar código en respuesta a cambios específicos en los datos.
Definición de watcher para counter:
watcher que observa la propiedad counter. Cada vez que counter cambia, el watcher se ejecuta y actualiza counterStatus en función del nuevo valor de counter.
watch: {
counter(newValue, oldValue) {
if (newValue > 10) {
this.counterStatus = 'El contador es mayor que 10';
} else {
this.counterStatus = 'El contador es 10 o menos';
}
}
}
2. Uso de counterStatus:
counterStatus se muestra en el HTML y se actualiza automáticamente en respuesta a los cambios en counter.
Estado del Contador (Watched): {{ counterStatus }}
Los métodos se utilizan para realizar acciones que modifican el estado del componente. En este ejemplo, el método incrementCounter incrementa el valor de counter cuando se hace clic en el botón.
methods: {
incrementCounter() {
this.counter++;
}
}
Computed Properties: Son propiedades calculadas en función de otras propiedades y se almacenan en caché. Se vuelven a calcular solo cuando cambian sus dependencias reactivas.
fullName que concatena firstName y lastName.Watchers: Permiten observar y reaccionar a cambios en las propiedades reactivas. Se utilizan para ejecutar código en respuesta a cambios específicos.
watch para counter que actualiza counterStatus.Métodos: Definen acciones que modifican el estado del componente y pueden ser llamados desde el HTML en respuesta a eventos del usuario.
incrementCounter que incrementa counter.vamos a aprender sobre Vuex, la biblioteca oficial de manejo de estado para aplicaciones Vue.js. Vuex nos permite gestionar el estado de la aplicación de manera centralizada, facilitando la gestión de datos compartidos entre múltiples componentes.
Vuex es un patrón de estado y una biblioteca para aplicaciones Vue.js. Proporciona un almacén centralizado para todos los componentes de una aplicación, con reglas que aseguran que el estado solo pueda ser mutado de manera predecible.
Primero, necesitamos instalar Vuex en nuestro proyecto Vue.js. Puedes hacerlo ejecutando el siguiente comando:
npm install vuex@next
Luego, configuramos Vuex en nuestro proyecto:
// store.js
import { createStore } from 'vuex';
const store = createStore({
state() {
return {
counter: 0
};
},
mutations: {
increment(state) {
state.counter++;
}
},
actions: {
increment(context) {
context.commit('increment');
}
},
getters: {
doubleCounter(state) {
return state.counter * 2;
}
}
});
export default store;
// main.js
import { createApp } from 'vue';
import App from './App.vue';
import store from './store';
const app = createApp(App);
app.use(store); // Usamos Vuex en nuestra aplicación
app.mount('#app');
Contador con Vuex
Contador: {{ counter }}
Contador Duplicado: {{ doubleCounter }}
state)El state es el objeto que contiene el estado compartido de la aplicación. En nuestro ejemplo, tenemos una propiedad counter que almacena el valor del contador. Definimos el estado inicial del contador en 0 en el archivo store.js.
mutations)Las mutaciones son funciones que cambian el estado de manera sincrónica. En nuestro ejemplo, tenemos una mutación llamada increment que incrementa el valor del contador. Las mutaciones aseguran que los cambios sean predecibles y rastreables.
actions)Las acciones son funciones que pueden ejecutar código asíncrono y luego comprometer mutaciones. En nuestro ejemplo, la acción increment despacha la mutación increment. Las acciones se utilizan para manejar lógica de negocio más compleja que puede involucrar operaciones asíncronas.
getters)Los getters son funciones que derivan el estado de Vuex para obtener información calculada. En nuestro ejemplo, doubleCounter es un getter que devuelve el valor de counter multiplicado por dos. Los getters permiten realizar cálculos derivados del estado y pueden ser utilizados como propiedades computadas en los componentes.
En el archivo App.vue, utilizamos los helpers mapState, mapGetters, y mapActions para mapear el estado, los getters y las acciones de Vuex a las propiedades y métodos del componente. Esto nos permite acceder y manipular el estado de Vuex directamente desde los componentes.
mapState: Mapea el estado de Vuex a las propiedades del componente.mapGetters: Mapea los getters de Vuex a las propiedades del componente.mapActions: Mapea las acciones de Vuex a los métodos del componente.state): Almacena los datos compartidos de la aplicación.mutations): Funciones que cambian el estado de manera sincrónica.actions): Funciones que pueden ejecutar código asíncrono y luego comprometer mutaciones.getters): Computed properties para el estado de Vuex.mapState, mapGetters, y mapActions para conectar el estado de Vuex con los componentes de Vue.