Ciclo de vida disconnectedCallback en componentes web
Todos los cursos GRATIS
Se acaba en:
:::
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()
¿Cuándo debo usar el disconnectedCallback exactamente?
Debes implementarlo siempre que tu componente web haya establecido conexiones o procesos continuos durante su ciclo de vida activo. Por ejemplo, si en tu connectedCallback iniciaste un temporizador con setInterval, te suscribiste a una API externa (como un WebSocket), o añadiste escuchadores de eventos globales al objeto window o document.
Si tu componente es estático y solo muestra información visual sin interacciones complejas, probablemente no necesites este método. Sin embargo, en aplicaciones dinámicas como dashboards, carritos de compras o modales que aparecen y desaparecen constantemente del DOM, es obligatorio usarlo. Piensa en este ciclo de vida como el camión de basura de tu componente: su trabajo es recoger todo lo que ya no sirve justo en el milisegundo en que el elemento desaparece de la pantalla.
en el script quito type="module" y me funciona pero cuando lo dejo no, alguien sabe a que se debe esto?
"type": "module"
Esta linea le indica que los javascript usados tendran la sintaxis de ECMA Script modules, asi cada archivo debe espcificar:
import express from 'express';
export const miFuncion = () => {};
De lo contrario seran tratados de forma predeterminada: commonjs
Es decir la forma tradicional basada en funciones.
El ciclo de vida disconnectedCallback
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.
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()```