Vue.js es un framework de JavaScript que permite crear interfaces web interactivas. Un elemento esencial en la funcionalidad de los componentes de Vue es el contexto, el cual proporciona varias herramientas para gestionar propiedades y eventos en los componentes. Este contexto forma parte del segundo argumento de la función setup y ofrece una serie de datos valiosos.
¿Cuáles son los elementos clave de context?
Cuando usamos setup en un componente, podemos acceder a cuatro elementos proporcionados por context: attrs, emit, expose y slots.
Attrs: Representa los atributos que recibe el componente que no son declarados como props. A diferencia de las props, los atributos no son reactivos. Por ejemplo, si un componente recibe atributos que no fueron declarados como props en Vue.js, se consideran automáticamente como atributos.
Emit: Esta función es utilizada para emitir eventos desde el componente. La sintaxis ha cambiado ligeramente con respecto a Vue 2, al no requerir el símbolo this.. Emit permite pasar el nombre del evento y sus parámetros.
Expose: Permite hacer accesibles ciertas variables internas del componente a otros componentes, expose debe ser llamado una única vez y permite definir qué valores se pueden exponer, facilitando que otros elementos accedan a ellos.
Slots: Proporciona acceso a los slots del componente, permitiendo la personalización del contenido dentro de un componente desde otros elementos.
¿Cómo utilizar el context en Vue.js?
Al usar el context de Vue.js, hay diferentes formas de manejarlo dentro de nuestro código.
Podemos acceder a los elementos de context usando la notación de objeto o la destructuración de ECMAScript. Así, es posible, por ejemplo, acceder a los attrs directamente como si fueran variables.
const{ emit, expose }= context;
La función expose se puede utilizar de la siguiente manera dentro de la función setup para publicar variables específicas:
expose({ fullName,});
¿Qué limitaciones tiene la función setup?
La función setup tiene ciertas restricciones debido a que se ejecuta antes del ciclo de vida del componente. Esto afecta su capacidad para interactuar con algunos elementos tradicionales de Vue.js, como:
Refs: No se puede usar this.refs porque setup no tiene acceso a la instancia completa del componente.
Métodos de opción API: Métodos tradicionales definidos fuera de setup no están accesibles dentro de ella.
Data y Computed: Necesitamos utilizar reactividad proporcionada por Composition API (como ref, reactive) ya que los métodos tradicionales que dependen de this no están disponibles.
Para contrarrestar estas limitaciones, podemos definir funciones y convertibles de JavaScript dentro de setup para manejar métodos y reactividad.
Recomendaciones prácticas
Para trabajar eficazmente con setup y context en Vue.js 3, es fundamental:
Asegurarse de convertir las props y datos en elementos reactivos usando herramientas como ref, reactive, o toRefs.
Definir funciones directas dentro de setup para mantenerlas accesibles y utilizables.
Familiarizarse con la Composition API para maximizar las capacidades de reactividad de Vue.js.
Este enfoque otorga mayor control y flexibilidad, permitiendo un código más limpio y en armonía con la esencia de JavaScript, acercándose a "vanilla JS".
Viuuu, Me parece que se podrían incluir algunos ejemplos... quede pedaleando en el aire.
¿El metodo expose() es lo contrario a props cierto, osea props se usa para enviar datos del padre al hijo y expose() se usa para enviar datos del hijo al padre?
Algo así, sí, digamos que expone esos datos para que quien consuma el componente pueda leerlos. Pero ojo, siempre hay que tener cuidado que no pierdan la reactividad.
estuve probando el funcionamiento de los attrs y son completamente reactivos.
pero la profe menciono que no eran reactivos.. no entiendo. alguien me lo podria aclarar?
Puede deberse a la forma en que funciona la v3 de Vue, versus la v2.
Hola, para utilizar expose en el componente padre se utiliza el atributo [ref] con algún valor al momento de declarar el compomente hijo en el template:
En este caso el valor es [home], pero puede ser cualquiera
<home ref="home">
Y para acceder a su valor en script utilizamos
this.$refs.home.fullName;
De tal manera que en App.vue tendríamos lo siguiente
me gustaria que subieras otro explicando como acceder a cada variable del context y como usarlos, me parece que los mencionaste y es importante aprenderlos
Lo único que me quedo claro es que se usa para poder hacer emits, pero siento que no quede claro.
pues compositionApi tiene todo lo de optionsApi mejor estructurado si vamos a hacer una aplicacion vue mas grande.
Aunque uso mucho optionsApi para el front de laravel con inertia (vue.js con el routing y backend de laravel).