Ahora, he creado otro archivo de entrada llamado Web Component Main. Este archivo TypeScript será el punto de entrada para exponer un nuevo elemento personalizado. Comencemos definiendo un elemento personalizado estándar. Vamos a importar Define Component 1, y en este archivo, solo queremos exportar una clase que extienda elementos HTML y renderice un fragmento estándar de HTML en cadena. Bastante estándar.
Veámoslo en acción. Así que, veámoslo en el navegador. Tres elementos mostrando en la pantalla. Podemos verlos aquí en el DOM, cada uno de ellos incluyendo el shadow DOM, y una vez que pasamos un atributo llamado name, podemos ver que llegó al lugar correcto en el DOM. Si vamos aquí y editamos plantillas, así que añadamos prueba, por ejemplo, la aplicación se vuelve a renderizar con las modificaciones correctas. Eso es genial, y como podemos ver, también intentamos renderizar Like button y Video Player aquí, que en realidad llegaron al DOM pero aún no están implementados, por lo que no se renderizó nada.
El navegador de forma nativa no sabe qué es Like button y Video Player, por lo tanto, no se renderizó nada. Así que, vamos a definir estos componentes como un elemento personalizado y usar nuestro componente React existente. Así que, vamos aquí y creamos Define Like button, y al igual que antes, estamos exponiendo un array de atributos a los que queremos escuchar. Estamos creando un shadow DOM, pero ahora dentro de nuestra función de renderizado, estamos usando create root de React DOM client y también importamos nuestro componente original Like button, luego podemos simplemente renderizar directamente el componente Like button, un componente React, enviando los props que recopilamos de los atributos.
Y como podemos ver, el componente se renderizó igual que antes en la aplicación React. Está reaccionando correctamente a los atributos que estamos enviando. Así que, por ejemplo, la altura y el ancho, el SLC del video o el conteo de Likes para el componente Like, y si estamos dispuestos a usar más objetos complejos como los callbacks que usamos antes, podemos simplemente obtener el elemento correcto del DOM y pasarlo como una propiedad.
Comments