Lección 15. Ciclo de Vida de los Componentes.

El Ciclo de vida de los componentes son métodos especiales que REACT nos ofrece para ejecutar ciertas cosas de manera automática.

Existen 3 ciclos de vida.

Algunos métodos para estos states son:

Montaje._

El constructor:

Copiar código
constructor ()

Este método se ejecuta al inicio de todo componente, desde el momento de inicializar el state.

El render:

Copiar código
render ()

Es el método que se encarga de renderizar en pantalla (las veces que sean necesarias), el componente cuando se hace un cambio de state:

y el ComponentDidMount:

Copiar código
componentDidMount ()

Este método, se ejecuta, cuando un componente es insertado en el DOM.

Nota: NO es igual que el método render, para hacer el método componentDidMount() primero debe ejecutarse render().

Actualización._

El render:

Copiar código
render ()

Este método, es el mismo que el anterior, simplemente se ejecuta, tanto cuando se renderiza la primera vez, como cuando se actualice.

Y el ComponentDidUpdate:

Copiar código
componentDidUpdate ()

Este método, se ejecuta, cuando el componente, es actualizado, cuando cambia de state.

Puede servirnos para obtener los datos del state o props antes de cambiar.

Desmontaje._

El ComponentWillUnmount:

Copiar código
componentWillUnmount ()

Evento que se ejecuta cuando el componente es removido del DOM.

Ejemplo con 2 componentes._

En el siguiente ejemplo, podras ver, una funcionalidad de los métodos del ciclo de vida

A continuación el código del componente padre:

Copiar código
import React, { Component } from "react";

export default class CicloVida extends Component {

  //Cuando el component se inicializa
  constructor (props) {
    super(props);
    console.log("0, Metodo constructor: Se inicializa, aun NO esta en el DOM");

    this.state = {
      hora: new Date().toLocaleTimeString(),
      visible: false
    }

    this.temporizador = null
  }

  //Metodo cunado el component se inserta en el DOM (no cunado se dibuja en pantalla)
  componentDidMount() {
    console.log("1, Metodo componentDidMount, El componente ya se encuentra en el DOM");
  }

  //Cuando el componente se actualiza (cambia de estado y  se renderiza nuevamente)
  //Puede servirnos para guardar las props antes de cambiar de estado (antes de cambiar las props)

  componentDidUpdate (prevProps, prevState) {
    console.log("2, Metodo componentDidUpdate, El state del componente a cambiado");
    console.log(prevProps);
    console.log(prevState);
  }

  tiktak = () => {
    this.temporizador = setInterval (() => {
      this.setState ({
        hora: new Date().toLocaleTimeString()
      })
    }, 1000)
  }

  iniciar = () => {
    this.tiktak();
    this.setState({
      visible: true
    })
  }

  detener = () => {
    clearInterval(this.temporizador);
    this.setState({
      visible: false
    })
  }

  //Cuando el metodo se renderiza en pantalla (una primera vez o mas)
  render () {
    console.log("4, Metodo render: el componente se (re)dibuja en el DOM (renderizado en pantalla)");
    return (
      <>
        <h2>
          Ciclo de vida de los componentes
        </h2>

        {this.state.visible && <Reloj hora = {this.state.hora}/>}

        <button onClick={this.iniciar}>
          Iniciar
        </button>

        <button onClick={this.detener}>
          Detener
        </button>
      </>
    )
  }
}

Y el código del componente hijo:

Copiar código
class Reloj extends Component {
  constructor (props) {
    super(props);
  }
	
  //Cuando el component el eliminado del DOM
  componentWillUnmount () {
    console.log("3, Metodo componentWillUnmount, El componente a sido eliminado del DOM");
  }

  render () {
    return <h3>{this.props.hora}</h3>
  }
}

Nota: No olvidemos importar el component hijo y exportar el component padre.

El component hijo (Reloj) no esta export default.