Programación usando VueJS (Ciclo de vida en Vue). Parte 5

El ciclo de vida en Vue

Ya que en las entradas anteriores aprendimos a crear componentes, en esta ocasión aprenderemos como funciona una parte importante de Vue y que afecta directamente a los componentes.

Los componentes tienen unos estados por los que se tiene que pasar cuando los usamos, y ese proceso es conocido como ciclo de vida.

A continuación un diagrama del ciclo de vida de un componente en Vue:

Vue tiene diferentes estados y esto nos permite usar ciertas acciones antes y después de cada estado.

A estas acciones se las conoce como hooks y tienen unos propósitos claros:

  • Nos permite conocer como se crea, actualiza y se destruye un componente.
  • Podemos saber en que punto se encuentra el componente y poder actuar en consecuencia.

A continuación vamos a ver los hooks que nos ofrece Vue:

  • beforeCreate: Su ejecución es justo después de la inicialización de la instancia y antes de que el componente este creado.
  • created: Se ejecuta cuando la instancia, eventos, computed properties, el data y los métodos están creados. Normalmente se utiliza para inicializar propiedades del objeto data, llamadas a servicios, etc… En este punto el componente no esta en el DOM todavía.
  • beforeMount: Su ejecución es justo antes de que se añada al DOM.
  • mounted: Su ejecución es después de añadirlo al DOM, y se puede utilizar para inicializar librerías que dependan del DOM.
  • beforeUpdate: Su ejecución es cuando el objeto data cambia, pero el DOM aun no ha realizado los cambios.
  • updated: Su ejecución es después de que el objeto data cambie y el DOM muestre estos cambios.
  • beforeDestroy: Su ejecución es justo antes de eliminar la instancia.
  • destroyed: Su ejecución es cuando la instancia, eventos, directivas e hijos del componente se han eliminado.

A continuación el código de el componente que hemos creado en la anterior entrada y un vídeo con el funcionamiento:

filmModal.vue

<template>
  <div :class="typeError" v-show="showModal" v-text="msnModal"></div>
</template>
<script>
  export default {
    props: ['typeError','msnModal','showModal'],
    data () {
      return {
        type: null
      }
    },
    computed: {
      typeModal () {
        return this.type
      }
    },
  // Inicio Ciclo de vida
  beforeCreate () {
    console.log('1 - beforeCreate')
  },
  created () {
    console.log('2 - created')
  },
  beforeMount () {
    console.log('3 - beforeMount')
  },
  mounted () {
    console.log('4 - mounted')
  },
  beforeUpdate () {
    console.log('5 - beforeUpdate')
  },
  updated () {
    console.log('6 - updated')
  },
  beforeDestroy () {
    console.log('7 - beforeDestroy')
  },
  destroyed () {
    console.log('8 - destroyed')
  }
  // Fin Ciclo de vida
  }
</script>
<style scoped>
  .error {
    background: #ef8c8c;
    padding: 20px;
    color: #ffffff;
  }
</style>