3 razones para usar script setup y Vuejs 3

Conoce las novedades de script setup en Vue 3, entiende por qué puede hacerte la vida más fácil evitando tareas repetitivas y comienza a utilizarlo en tus próximos proyectos


Si ya has trabajado con Vue.js, sabrás que script setup es una de las novedades de Vue 3 y está pensado para hacerte la vida más fácil, evitando que realices algunas tareas repetitivas.

Estas son las 3 razones por las que yo comenzaría a usarlo ya mismo.

Sin script setup

Pero primero necesitamos algo para comparar: este es un componente típico utilizando el método setup de la Composition API.

<script>
    import {ref} from "vue"
    import AppComponent from "./AppComponent.vue"
    export default {
        setup() {
            const message = ref("Hello from Escuela Vue 🔥")
            const start = function () { ...
            }
            return {message, start}
        }
        components: {AppComponent},
    }
</script>
<template>
    <AppComponent/>
    <button @click="start">{{ message }}</button>
</template>

Nada demasiado original, ¿verdad?. Vamos ahora a llevar a su versión con script setup.

Con script setup ⚡️

1. No necesitas declarar el método setup

Como suena, no es necesario crear el método, ya que se entiende que toda la lógica dentro de script forma parte del setup del componente. Tampoco es necesario entonces el export default asociado.

2. No necesitas declarar components

Esta es mi favorita: no más propiedad componentes: { ... }, basta con que importes los componentes necesarios de la etiqueta script y Vue automáticamente hará que estén disponibles para utilizar el template.

3. No necesitas retornar nada explícitamente

Como sabes, si usas el método setup tradicional tendrás que, al final, exponer aquella lógica que necesitas, ya sean valores reactivos, métodos o demás.

Pues bien, todo lo que definas dentro de script setup ya es accesible dentro del template. Ojo, solo de forma local. Si intentamos acceder desde un componente ancestro no podrás. Te lo explico más adelante.

Teniendo claros estos 3 puntos, este es el mismo componente que te mostré al principio, pero usando script setup 🔥

<script setup>
    import {ref} from "vue"
    import AppComponent from "./AppComponent.vue"
    const message = ref("Hello from Escuela Vue 🔥")
    const start = function () { ...
    }
</script>
<template>
    <AppComponent/>
    <button @click="start">{{ message }}</button>
</template>

Como ves no hay método setup, ni declaración de componentes, ni tenemos que retornar nada para hacerlo accesible en el template.

Consideraciones extra

Quizás te estés preguntando cómo hacer ahora algunas tareas que antes hacías usando el método setup y sus parámetros. Veamos algunas de ellas:

Definir propiedades y lanzar eventos

Si usas script setup tienes acceso a dos funciones helper para poder designar las propiedades adecuadas y gestionar los eventos. Son defineProps y defineEmits (fíjate que no se importan).

<script setup>
    const props = defineProps({
        name: String
    })
    const emit = defineEmits(['update', 'remove'])
</script>

Acceder a slots y atributos

Ocurre lo mismo que con las propiedades y eventos: tenemos helpers a nuestra disposición.

<script setup>
    import {useSlots, useAttrs} from 'vue'
    const slots = useSlots()
    const attrs = useAttrs()
</script>

Exponer lógica hacia fuera

Una de las características de script setup es que cierra hacia fuera la lógica del componente. ¿Qué ocurre entonces si queremos compartir algún método?. Esto ya lo vimos cuando hablábamos de cómo llamar un método de un componente hijo. Es tan sencillo como definir qué queremos hacer visible hacia fuera.

<script setup>
    import {ref} from "vue"
    import AppComponent from "./AppComponent.vue"
    const message = ref("Hello from Escuela Vue 🔥")
    const start = function () { ...
    }
    defineExpose({ // Ahora son accesibles
        message,
        start
    })
</script>

Espero que con este mini tutorial te haya quedado claro algunos beneficios que tiene usar script setup en Vue 3 y que lo uses desde ahora.

Juan Andrés Núñez
Juan Andrés Núñez
Ingeniero Frontend. Especialista en Vue.js. Docente profesional. Estoico.