El ciclo de vida de los componentes web es esencial para entender cómo se integra y opera un componente dentro del Document Object Model (DOM). Esta comprensión es fundamental para desarrollar componentes eficaces y obtener el máximo provecho de ellos. Si has trabajado con librerías o frameworks, probablemente hayas oído hablar del ciclo de vida, ya que es similar en todos los casos. Estos ciclos son elementos estándar del navegador y son parte fundamental del Critical Rendering Path.
¿Cuáles son las etapas del ciclo de vida de los componentes web?
Constructor
El ciclo de vida comienza con el constructor. Este concepto es básico para quienes han trabajado con clases, y ahora lo usaremos para crear componentes web. En JavaScript, al crear un constructor, se guarda en la memoria qué es lo que tendrá nuestra clase. Esto asegura que el componente esté en memoria listo para ser utilizado. Cada componente que creamos debe tener un constructor, ya que es la parte esencial para inicializar el componente en la memoria de JavaScript.
classMiComponenteextendsHTMLElement{constructor(){super();// Lógica del constructor}}
Connected Callback
El connected callback ocurre cuando el componente ya existe en el DOM como un nodo visible. En este punto, puedes empezar a renderizar HTML y CSS, asegurándote de que las tareas de inicialización importantes del componente se ejecuten aquí y no en el constructor. De esta manera, sólo se inicializan las partes realmente necesarias una vez que el componente es visible en la página.
Disconnected Callback
El disconnected callback se activa cuando se elimina el componente del DOM. En aplicaciones dinámicas, podemos agregar o eliminar nodos, y al hacer esto, es importante desconectar cualquier funcionalidad o evento del componente para liberar memoria y optimizar el rendimiento.
Attribute Changed Callback
El attribute changed callback monitorea cambios en los atributos de un componente. Esta función es crucial para realizar ajustes cuando hay modificaciones en los atributos HTML del componente, asegurando que éste refleje esos cambios internamente y se actualice conforme sea necesario.
Adopted Callback
El adopted callback es una etapa rara vez utilizada, ya que ocurre cuando un componente se utiliza dentro de un iframe. Iframes son considerados malas prácticas debido a problemas de rendimiento y seguridad, lo que hace que este ciclo sea menos común en el desarrollo web actual.
¿Cómo integran los ciclos de vida con el DOM?
Estos ciclos de vida son partes del Critical Rendering Path que permiten gestionar más eficientemente cómo un componente interactúa con el DOM. Desde la inicialización y la presencia en memoria hasta la eliminación y gestión de atributos, cada etapa es crucial para el manejo eficaz de los recursos, asegurando que los cambios y la liberación de memoria ocurran correctamente.
Recomendaciones para el desarrollo
Inicializa adecuadamente: Utiliza el constructor para establecer las propiedades iniciales de la clase, pero reserve el renderizado para el connected callback.
Optimiza la memoria: Aprovecha el disconnected callback para limpiar eventos y liberaciones de memoria eficazmente.
Monitorea cambios: Usa el attribute changed callback para reaccionar a modificaciones en los atributos de los componentes.
Con un entendimiento claro del ciclo de vida de los componentes web, estarás mejor preparado para construir aplicaciones robustas y eficientes. ¡Adelante, el conocimiento adquirido aquí es la clave para un dominio efectivo en el desarrollo web!
constructor: Directamente desde el JavaScript Engine, el constructor nos servirá para definir y cargar todas las variables en memoria que necesitemos, es mala práctica pintar el componente aquí
connectedCallback: Cuando el componente ya está pintado dentro del DOM ypodemos hacer uso de él.
attributeChangedCallback: Cuando un atributo de nuestro componente cambia
disconnectedCallback: Cuando el componente se "destruye" o se quita del DOM
adoptedCallback: Cuando el componente es movido a un nuevo DOM, básicamente cuando es pintado desde un iframe por ejemplo :D
.
Más información sobre este lifecycle aquí (en español):
.
Usando callbacks de ciclo de vida
.
Excelente resumen
Super, me servirá para repasar
♻️ Ciclo de vida de un componente
Apuntes
Son parte del critical Render Path
Las clases cuando generamos un constructor generamos están guardando en memoria que es lo que tiene el constructor
Todos los componentes deben tener un constructor
Una mala práctica es pintar el template directamente el template en el constructor
En el constructor solo se debe asegurar todo lo que está en memoria exista para pintar el componente
connectedCallback
Es cuando ya es un nodo del DOM
Aqui es donde se pueden renderizar el HTML y CSS
disconnectedCallback
Es cuando quitamos del DOM (desconectar) el componente
Cuando queramos liberar memoria los cuales está consumiendo nuestro componente
attibuteChangedCallback
Cuando exista un cambio de los atributos del componente este método nos avisara que cambiaron
adoptedCallback
Cuando un componente va a ser adoptado en otra cosa como ser un iframe
No es muy usado
Cada vez que instanciamos una clase, lo primero que pasa es que se llama el método constructor(), el cual tiene como propósito crear en memoria un objeto nuevo y dentro de el guardar los datos que previamente escribimos en el.
.
Es por esto que es una mala practica pintar el template desde el constructor, primero debemos asegurarnos de que en memoria este creada la nueva instancia de la clase y luego dejarle la responsabilidad de pintar el template al método connectedCallback()
MY NOTES LIFE CYCLE OF A COMPONENT :D
El ciclo de vida de un componente están 100% ligados al dom porque son estándares y esto existe en el navegador son parte del critical renderig path
Constructor
El constructor hace parte de las clases con las que vamos a construir un componente, este es el primer paso del ciclo de vida porque en el critical rendering path junto con el engine de js cuando generamos un constructor estamos guardando en memoria de js que es lo que tiene nuestro constructor y que hace parte también de la clase.
También porque estamos generando una clase que extiende de otra.
Connected Callback
Cuando el elemento que seria nuestro componente ya hace parte del dom y aqui es cuando podes realizar cierta actividad importante del componente como empezar a renderizar todo el html y css.
Es mala practica pintar el template directamente esto es malo ya que en el constructor debemos asegurarnos que todo lo que tiene que estar en memoria exista en ese momento para cuando queramos pintar el elemento en el dom
Disconected Callback
El momento en que quitamos un elemento lo estamos desconectando del dom, esto es importante ya que en el momento de eliminar estos elementos pueden tener cierta funcionalidad que también tenemos que desconectar para liberar memoria.
AttributeChangedCallback
Es importante porque es la forma en la cual adentro del componente vamos a ver los atributos de nuestra etiqueta html que es nuestro componente que va a tener
Si tenemos ciertos cambios en los atributos este nos lo va a indicar para poder hacer cambios adentro del componente
AdoptedCallback
!Es algo que nunca vas a utilizar
Porque es cuando ocupas un componente dentro de un iframe por ejemplo.
Y es mala practica utilizarlo por permance y por mala experiencia para el usuario.
les comparto un ejemplo del ciclo de vida 😀:
ciclo de vida
Ciclo de vida de un componente
Para guardar en memoria nuestro componente, como las variables usaremos el CONSTRUCTOR()
Ciclo de vida de los web components
Ciclo de Vida de los Componentes Web
El ciclo de vida define cómo existe y se comporta un componente dentro del Critical Rendering Path del navegador.
Fases Principales
Constructor: Es el punto de partida. Aquí la clase del componente se carga en la memoria de JavaScript. Es obligatorio para toda clase que extienda de un componente web. Nunca renderices HTML aquí; úsalo solo para inicializar lógica interna.
ConnectedCallback: Se ejecuta cuando el componente se inserta en el DOM. Es el lugar correcto para renderizar el HTML y CSS, ya que el elemento ya es un nodo visible en la página.
DisconnectedCallback: Se activa cuando el componente es eliminado del DOM. Es crucial para liberar memoria, eliminando eventos o funcionalidades que ya no son necesarias.
AttributeChangedCallback: Monitorea los cambios en los atributos de la etiqueta HTML. Permite reaccionar y actualizar el estado interno del componente cuando sus propiedades cambian.
AdoptedCallback: Caso excepcional que ocurre cuando el componente es movido a otro documento, como un iframe. Su uso es poco frecuente debido a problemas de rendimiento y seguridad.
Por que renderizar el componente en el constructor() es mala practica?
Por qué es una mala práctica utilizar iframes?
Riegos de seguridad
Problemas de usabilidad
Incompatibilidad con SEO
El ciclo de vida de los Web Components incluye:
Constructor: Inicializa el componente y guarda su estado en memoria.
Connected Callback: Se activa cuando el componente se añade al DOM, permitiendo la inicialización de su visualización.
Disconnected Callback: Se llama al eliminar el componente del DOM, útil para liberar memoria y desconectar eventos.
Attribute Changed Callback: Monitorea cambios en los atributos del componente para actualizar su estado.
Adopted Callback: Raro de usar; se activa si el componente es adoptado en un iframe.
Estos ciclos son esenciales para gestionar la memoria y la funcionalidad de los componentes en el DOM.
adoptedCalback()
attributeChangedCallback()
disconnectedCallback()
connectedCallback()
Constructor()
constructor
Solo sabia del constructor, de los demás no había escuchado o leído sobre estos métodos. Así que vamos allá!! 🤔
¿por que usar clases en js si esto ya esta mandado a recoger, todo lo han vuelto a funciones.?
La POO sigue mas viva que nunca, y en muchas industrias sigue siendo usado, una vez la dominas es bastante útil, te ahorras mucho tiempo de trabajo.
Llamadas de funciones especiales declaradas dentro de la clase de definición de los componentes personalizados, los que afectan su comportamiento:
connectedCallback: Invocado cuando el componente personalizado se conecta por primera vez al DOM del documento.
disconnectedCallback: Invocado cuando el componente personalizado se deconecta del DOM del documento.
adoptedCallback: Invocado cuando el componente personalizado se mueve a un nuevo documento.
attributeChangedCallback: Invocado cuando uno de los atributos del componente personalizado es añadido, removido o modificado.