La revolución de `script setup`
Propiedades y eventos en la era `script setup`
La comunicación entre componentes es una piedra angular de cualquier aplicación moderna. En Vue.js, esto se logra principalmente a través de propiedades (props) que fluyen hacia abajo y eventos (emits) que fluyen hacia arriba. Con `script setup`, la forma de declarar y utilizar estos mecanismos también ha sido simplificada y mejorada.Definición de propiedades con `defineProps`
`defineProps` es un macro de compilación que se utiliza para declarar las propiedades que un componente puede recibir. No necesita ser importado; está disponible globalmente dentro de ` ``` Como puedes ver, `defineProps` se invoca directamente y el objeto de configuración es similar al que usaríamos en la Options API. Las propiedades declaradas se acceden a través del objeto `props` retornado. La sintaxis con interfaces de TypeScript es especialmente potente para proyectos grandes, ya que ofrece autocompletado y validación en tiempo de desarrollo. La documentación de Vue sobre propiedades es un recurso excelente para explorar todas las opciones.Emisión de eventos con `defineEmits`
De manera similar a `defineProps`, `defineEmits` es otro macro de compilación que se utiliza para declarar los eventos que un componente puede emitir a su padre. También está disponible globalmente en ` ``` Al igual que con `defineProps`, el valor de retorno de `defineEmits` es una función `emit` que se utiliza para disparar los eventos. Esto proporciona una manera limpia y explícita de definir la interfaz de eventos de un componente, lo cual es muy útil para la comunicación entre componentes y para mantener la claridad del código, especialmente cuando se trabaja en equipos o en proyectos de gran envergadura.Gestión del estado reactivo: `ref` y `reactive`
En el corazón de Vue.js reside su sistema de reactividad, que permite que la interfaz de usuario se actualice automáticamente cuando los datos cambian. Con la Composition API, tenemos dos funciones principales para crear estado reactivo: `ref` y `reactive`. Comprender cuándo y cómo usar cada una es fundamental para construir aplicaciones Vue eficientes. * **`ref`:** Se utiliza para crear una referencia reactiva a cualquier tipo de valor. Es especialmente útil para valores primitivos (strings, numbers, booleans) y para cualquier tipo de dato cuando quieres que el seguimiento de reactividad se aplique a la referencia en sí, no solo a sus propiedades. Cuando accedes o modificas el valor de un `ref` en JavaScript, debes hacerlo a través de su propiedad `.value`. Sin embargo, en las plantillas de Vue, los `ref` se unwrappean automáticamente, por lo que no necesitas `.value`. * **`reactive`:** Se utiliza para crear un objeto reactivo. Solo funciona con objetos (incluyendo arrays y `Map`/`Set` si se usa `reactive` sobre ellos, aunque para arrays y colecciones primitivas, `ref` suele ser más sencillo). A diferencia de `ref`, `reactive` no requiere el `.value` para acceder a sus propiedades, pero si reemplazas todo el objeto reactivo por uno nuevo, perderás la reactividad. Aquí un ejemplo que muestra ambos: ```htmlInformación del usuario (con reactive):
Nombre: {{ usuario.nombre }}
Edad: {{ usuario.edad }}
Contador (con ref):
Valor: {{ contadorRef }}
Operaciones asíncronas y efectos secundarios con `watch` y `watchEffect`
En el desarrollo de aplicaciones web, es común necesitar realizar acciones o "efectos secundarios" en respuesta a cambios en el estado reactivo, o después de que un componente se monte en el DOM. Vue 3 nos proporciona `watch` y `watchEffect` para manejar estos escenarios, junto con ganchos del ciclo de vida como `onMounted`.Consumo de una API con `fetch` y `onMounted`
Uno de los casos de uso más frecuentes para los efectos secundarios es la carga de datos de una API cuando un componente se inicializa. `onMounted` es el gancho perfecto para esto. ```htmlPosts (API externa)
Cargando posts...
Error al cargar: {{ error.message }}
- {{ post.title }} - {{ post.body.substring(0, 50) }}...
Reacción a cambios con `watch`
`watch` nos permite reaccionar a cambios específicos en una o más fuentes de datos reactivas. Es útil cuando necesitas realizar una acción asíncrona o costosa solo cuando ciertos datos cambian. Puedes especificar qué fuentes de datos observar y qué función ejecutar cuando cambian. ```htmlObservador de valor
Valor de entrada:
Buscando "{{ busquedaActual }}"...
Resultados para "{{ busquedaActual }}": {{ resultadoBusqueda }}
Escribe algo para buscar...
`watchEffect` para efectos automáticos
`watchEffect` es una alternativa a `watch` que simplifica la sintaxis cuando la dependencia es implícita. Ejecuta una función inmediatamente y rastrea automáticamente cualquier dependencia reactiva dentro de ella. Cuando alguna de esas dependencias cambia, la función se vuelve a ejecutar. ```htmlEfecto automático con `watchEffect`
Número 1:
Número 2:
Suma calculada automáticamente: {{ suma }}