Ciclo de vida disconnectedCallback en componentes web
Resumen
¿Qué es el ciclo de vida disconnected callback?
Entender los ciclos de vida de los componentes web es fundamental para cualquier desarrollador que desee optimizar y gestionar los recursos de manera eficiente. Uno de los ciclos de vida más importantes pero menos discutidos es el disconnectedCallback, que se activa cuando un elemento ha sido retirado del DOM.
Este ciclo de vida es crucial porque permite al desarrollador realizar tareas de limpieza importantes, como eliminar variables y eventos que ya no son necesarios, lo que libera memoria y optimiza el rendimiento de la aplicación.
¿Cómo implementar el ciclo disconnectedCallback?
El proceso para implementar este ciclo en un componente web es sorprendentemente sencillo. A partir de una clase que extiende de HTMLElement, se definen los distintos ciclos de vida que vas a utilizar, empezando por el constructor.
classMyCustomElementextendsHTMLElement{constructor(){super();console.log('Hola, desde el constructor');}connectedCallback(){console.log('Hola, desde el DOM');}disconnectedCallback(){console.log('Adiós del DOM');}}// Definición del componentecustomElements.define('my-custom-element',MyCustomElement);// Ejemplo de eliminación de un componentedocument.querySelector('my-custom-element').remove();
Este fragmento de código ilustra cómo crear y limpiar un componente. También destaca la importancia de ejecutar el método remove, que elimina el componente y dispara el disconnectedCallback.
¿Por qué es importante liberar memoria?
La gestión de la memoria en las aplicaciones web es extremadamente importante, especialmente en proyectos grandes y complejos. Al limpiar eventos y variables innecesarias, se evitan fugas de memoria, lo cual puede afectar el rendimiento de la aplicación y llevar a una experiencia de usuario insatisfactoria.
Cuando retiras un elemento, es fundamental desmontar eventos y liberar variables que ya no se necesitarán.
El ciclo disconnectedCallback te permite escribir código que se ejecutará justo antes de que un elemento sea eliminado, asegurándote de que ningún recurso quede ocupando espacio innecesario.
Recomendaciones prácticas
Verifica el uso de recursos: Siempre revisa los recursos que un componente utiliza, especialmente los eventos y variables globales.
Utiliza disconnectedCallback: Implementalo para cualquier elemento que tenga el potencial de ser eliminado dinámicamente.
Prueba el comportamiento: Asegúrate de probar la eliminación de eventos mediante pruebas en diferentes condiciones para garantizar que el contenido dinámico y eventos asociados son correctamente gestionados.
Estos consejos te ayudarán a hacer un uso más eficiente de disconnectedCallback, maximizando el rendimiento de tus aplicaciones web.
Próximos pasos
Mientras avanzas en el aprendizaje y la implementación de componentes web, recuerda que el manejo adecuado de estilos y eventos es esencial. En la siguiente clase, exploraremos cómo elevar el nivel de los estilos en tus componentes, marcando un nuevo comienzo en el diseño de interfaces web robustas. ¡Te esperamos!
disconnected callback nos servirá para deslindar de eventos a nuestros componente, dentro de esa función podremos retirarlos para liberar espacio en memoria.
classMyCustomElementextendsHTMLElement{constructor(){super()//Aqui estamos establecieno en memoria las cosas que vamos a utilizar //Para nuestro componenteconsole.log('hola desde el constructor - Memoria')//Pero esto no quiere decir que ya exista en el dom}//Para que exista en el dom llamaremos a nuestro siguiente ciclo de viaconnectedCallback(){//Nuestro elemento ya existe como nodo en el dom entonces ya podemos generar//la interaccionconsole.log("hola desde el dom");}disconnectedCallback(){//Tercer ciclo de vida esto quiere decir que estamos retirando el elemento del domconsole.log("adios del DOM");}}//Definimos nuestro componente para utilizarlo como etiquetacustomElements.define("my-custome-element",MyCustomElement);//Retiramos el elemento del dom seleccionandolo con un query selector//Y removiendolo con la funcion remove que sirve para eliminar nodos.document.querySelector("my-custome-element").remove();
Y los recursos??
Ya los puedes ver en la pestaña de archivos y enlaces.
disconnectedCallback
disconnectedCallback: Se invoca cada vez que el elemento se desconecta del DOM del documento.
classMyCustomElementextendsHTMLElement{constructor(){super()console.log('Hola desde el constructor - Memoria')}connectedCallback(){console.log('Hola desde el DOM')}disconnectedCallback(){console.log('Adios desde el DOM')}}customElements.define('my-custom-element',MyCustomElement);document.querySelector('my-custom-element').remove()
disconnectedCallback
La ventaja de usar este método, es que si por ejemplo usamos remove() tendríamos problemas con los nodos hijos conectados al elemento a remover. Pero disconnectedCallback nos ayuda a deslindar esta conexión.
Documentación de los callbacks de ciclo de vida
que diferencia a Diego si se le entiende, no como el otro curso de components que no se entiende nada
En el momento en que tengamos que remover un componente antes de quitarlo debemos de eliminar todas las funciones o variables propias del elemento para eso nos sirve el disconnectedCallback(){}
una vez hecho esto podemos eliminar nuestro componente del DOM con remove()
El disconnectedCallback es el método invocado automáticamente cuando un componente es eliminado del DOM. Su propósito principal no es solo la eliminación, sino la gestión de recursos.
¿Para qué sirve?
Liberación de memoria: Es el lugar indicado para limpiar variables que ya no serán necesarias.
Desvinculación de eventos: Permite eliminar event listeners (clics, eventos personalizados, etc.) que se asignaron al componente durante su ciclo de vida.
Limpieza de estado: Evita que el componente deje "basura" o procesos activos en la memoria del navegador después de haber sido destruido.
Comparativa de ciclos de vida
constructor: Inicialización en memoria.
connectedCallback: El componente ya existe en el DOM y puede interactuar con él.
disconnectedCallback: El componente es retirado del DOM; es el momento de realizar la limpieza final.
en el script quito type="module" y me funciona pero cuando lo dejo no, alguien sabe a que se debe esto?
y si quiero remover un elemento de adentro de el componente?
es decir por ejemplo un elemento p que esta adentro
Hola
Puedes usar .remove() para eliminar elemente. Te comparto esta documentación al respecto.
Hola muchas gracias ya lo intente pero no e encontrado la forma de seleccionar el elemento
use document.querySelector(".propiedadDeEjemplo")
pero no hace la seleccion tambien ya intente por Tag y por ByClassName
Terminamos la parte básica del ciclo de vida de los componentes, ahora vamos por los estilos.
Gracias crack, juro que no me había dado cuenta
classCustomElementextendsHTMLElement{constructor(){super();console.log('Hello from the constructor');}connectedCallback(){console.log('Hello from the connected Callback');}disconnectedCallback(){console.log('Goodbay! DOM');}}customElements.define('my-custom-tag',CustomElement);document.querySelector('my-custom-tag').remove()```