Comunicación entre Componentes en Vue: Eventos de Hijo a Padre

Clase 28 de 53Curso Profesional de Vue.js 2

Resumen

¿Cómo enviar información desde un componente hijo hacia un componente padre en Vue.js?

Al trabajar con Vue.js, la comunicación entre componentes puede ser crucial para el funcionamiento de tu aplicación. Mientras que pasar datos desde un componente padre a un hijo se logra usando propiedades (props), el camino inverso —de un hijo a un padre— se realiza mediante eventos. Aquí te guiamos sobre cómo establecer esta comunicación.

¿Cómo emitir eventos desde un componente hijo?

Emitir un evento desde un componente hijo permite que el componente padre "escuche" y reaccione a acciones específicas iniciadas por el hijo. Aquí te mostramos cómo lograrlo:

  1. Agregar directiva v-on: Empezamos por adjuntar un evento a un elemento, como un botón dentro del componente hijo. Esto se puede hacer con la directiva v-on o usando el atajo @. Por ejemplo:

    <button @click="selectTrack">Play</button>
    
  2. Crear el método para manejar el evento: En el objeto methods del componente, definimos la función que llamaremos con el evento:

    methods: {
      selectTrack() {
        this.$emit('select', this.trackId);
      }
    }
    
  3. Usar $emit para emitir un evento: Utilizamos el método $emit() para enviar el evento al componente padre. El primer argumento de $emit es el nombre del evento y el segundo es la información que deseamos pasar, en este caso trackId.

¿Cómo escucha el componente padre el evento emitido por el hijo?

Una vez que el hijo emite el evento, el componente padre debe estar listo para capturarlo y responder adecuadamente. Aquí te explicamos cómo hacerlo:

  1. Usar la directiva v-on para escuchar eventos: Dentro del componente padre, escuchamos el evento utilizando la directiva v-on:

    <Track @select="setSelectedTrack" />
    
  2. Definir el método correspondiente en el padre: En el objeto methods del componente padre, creamos una función para manejar el evento recibido:

    methods: {
      setSelectedTrack(id) {
        this.selectedTrack = id;
      }
    }
    
  3. Actualizar el estado del componente padre: Dentro del método, actualizamos el estado o realizamos acciones basadas en la información obtenida del evento.

¿Cómo mejorar el código con Vue.js y estilos CSS?

La reactividad y el manejo de estilos son elementos esenciales en las aplicaciones Vue.js. Aquí te ofrecemos algunos consejos para mejorar la interacción y presentación de tus componentes:

  • Destacar elementos seleccionados: Utiliza clases CSS para resaltar el componente seleccionado. Por ejemplo, puedes aplicar una clase isActive usando v-bind:

    <template>
      <div :class="{ isActive: t.id === selectedTrack }" v-for="t in tracks">
        <!-- contenido -->
      </div>
    </template>
    
  • Usar scoped en estilos CSS: Para evitar que los estilos CSS afecten globalmente, utiliza el atributo scoped en tus etiquetas <style>:

    <style scoped>
      .content {
        min-height: 40px;
      }
    </style>
    

¿Por qué es importante la comunicación padre-hijo y viceversa?

La comunicación entre componentes de un proyecto Vue.js es esencial para mantener la inmutabilidad y reactividad de los props. Las props no deben modificarse directamente en el hijo. Por lo tanto, siempre que sea necesario actualizar algo que influya en el padre, el hijo debe notificar a través de eventos. Este modelo de comunicación asegura una aplicación Vue.js estructurada, eficiente y fácil de mantener.