¡Slots, Slots, Slots, Todos!

Bookmark
Rate this content

¡Vamos a usar slots para llenar el club de Lil Jon con gente! Comenzando con componentes web, recorreremos cómo usar slots para crear envoltorios altamente extensibles para contenido dinámico. Luego hablaremos sobre cómo Vue y Angular aprovechan esta característica de HTML y cómo los children de React son diferentes.

This talk has been presented at React Summit US 2025, check out the latest edition of this React Conference.

Abbey Perini
Abbey Perini
20 min
21 Nov, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Abbe explica cómo los slots mejoran el contenido dinámico en los componentes y demuestra la creación de un elemento personalizado con el shadow DOM. El contenido cubre la utilización de atributos de slot para slots nombrados y botones de slot para la navegación dentro de los componentes. Explora los efectos de estilo en los componentes, el uso de slots predeterminados y nombrados en componentes de Vue, el acceso y la gestión de props de slot utilizando slots predeterminados con ámbito en Vue, y la creación de listas dinámicas con desestructuración de JavaScript en componentes de Vue. Además, discute los slots nombrados en Angular para la proyección de contenido, la coincidencia de selectores CSS, los selectores de slot, la proyección de contenido condicional con ng-template y los modos de encapsulación de vista como la API de Shadow DOM.
Available in English: Slots, Slots, Slots, Everybody!

1. Understanding Slots in Web Development

Short description:

Abbe explica cómo los slots mejoran el contenido dinámico en los componentes. Ella introduce los componentes web, detallando el uso de las etiquetas template y slot en HTML. Abbe demuestra la creación de un elemento personalizado con el shadow DOM para el estilo y la encapsulación.

¿Están listos para hablar sobre slots, slots, slots, todos? Soy Abbe, una ex desarrolladora de React, y cuando comencé a aprender Vue, me pregunté, ¿qué demonios son los slots? Los slots convierten los componentes en envoltorios que mejoran tu contenido dinámico. Así que en lugar de tener que decidir exactamente qué va a hacer tu componente cuando lo escribes y no se le permite hacer nada más, puedes usar un slot para crear un pequeño marcador de posición y pasar cualquier contenido a eso como quieras.

Vamos a comenzar con la especificación de componentes web y luego cómo React, Vue y Angular aprovecharon esa especificación para usar slots en los frameworks. Toda esta información estará disponible para ti después de que termine la charla, así que no tienes que recordar ninguna de las implementaciones. Solo piensa en cómo usar los slots.

Vamos a comenzar con los componentes web. Son parte de la especificación de HTML. Todo lo que estoy a punto de mostrarte está disponible en tu navegador con JavaScript y HTML ahora mismo. Primero, necesitamos una etiqueta template y una etiqueta slot. En mi archivo HTML, tengo una etiqueta template con un ID. Tiene algo de estilo en ella, y luego dentro de un contenedor div, un puñado de slots. Este primer slot es un slot por defecto. No tiene un nombre. El segundo slot está usando el atributo name con el valor title para nombrar el slot title. Dentro de él hay contenido por defecto. Esto es lo que mostraremos si no pasamos nada al slot. Este slot está envuelto en un elemento H2 o de encabezado. Cualquier cosa que pase a ese slot será envuelta en un elemento de encabezado. Dentro de este siguiente slot llamado content, tengo una etiqueta de párrafo. Cualquier cosa que pase a ese slot sobrescribirá la etiqueta de párrafo. A continuación, necesitamos un elemento personalizado con el shadow DOM. Estoy usando la API de elementos personalizados para definir un componente llamado shots component. Luego paso el nombre de la clase shots a él. Esto está extendiendo el elemento HTML, así que obtenemos todas las ventajas que obtienes con un elemento HTML básico. Luego estoy dentro del constructor. Estoy obteniendo la etiqueta template por el ID, creando un shadow DOM, que es solo un pequeño DOM encapsulado dentro de tu DOM regular. Dentro de ese shadow DOM, estoy agregando una copia de todo el contenido dentro de esa etiqueta template, y estoy agregando una clase para facilitar el estilo. Voy a llamar al componente. Voy a usar este nombre que pasé al método de definición. En la parte superior de mi archivo HTML, tengo shots component.

2. Utilizing Slot Attributes and Navigation Buttons

Short description:

El contenido incluye pasar contenido por defecto usando slots, utilizar atributos de slot para slots nombrados y demostrar el uso de botones de slot para la navegación dentro de los componentes.

Todo el contenido que quiero pasarle está actualmente comentado. No estoy pasando nada a él, y deberíamos ver el contenido por defecto. Deberíamos ver a Sad Little John porque no hay shots, y lo vemos. Como puedes ver, la etiqueta template está montada, pero eso no es lo que se muestra en la página. Esa es nuestra llamada al componente shots. Dentro de la etiqueta template hay un fragmento de documento, y dentro de ese fragmento de documento está todo el contenido que estaba en esa etiqueta template en nuestro archivo HTML. Dentro del componente hay una raíz shadow con todo el contenido que estaba dentro de la etiqueta template.

A continuación, usemos un atributo de slot para pasar algo de contenido a nuestros slots. Este primer elemento tiene un atributo de slot con el valor title, por lo que este contenido debería ir en el slot llamado title. Lo mismo para el resto de los slots nombrados, pero este último no tiene el atributo de slot en él. Todo su contenido irá al slot por defecto. Aunque lo estoy pasando al final, el slot por defecto está en la parte superior, así que espero ver shots, shots, shots sobre Happy Little John porque ahora tenemos shots, y lo vemos. Dentro de mi componente ahora que estoy pasando algo de contenido, hay botones de slot.

Al presionar este botón me llevará al slot al que se está poniendo ese contenido, y si expando el slot, entonces obtengo un botón de revelación que me lleva de regreso al slot al que se está pasando. Así que, hablamos sobre el slot y el botón de revelación. Vimos que la etiqueta template está montada. Tiene un fragmento de documento en ella. La etiqueta template en sí no se muestra. Hay una raíz shadow, y dentro de ella las etiquetas de slot están montadas, y ahora necesitamos hablar sobre cómo el shadow DOM afecta al CSS.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Lo Bueno, Lo Malo, y Los Componentes Web
JSNation 2023JSNation 2023
29 min
Lo Bueno, Lo Malo, y Los Componentes Web
Top Content
Web Components are a piece of reusable UI enabled by web standards and built into the web platform. They offer the potential for faster component initialization and less library overhead. Web Components can be created from scratch and utilized with existing component libraries. Shadow DOM and Declarative Shadow DOM provide benefits such as scoped CSS and server-rendered components. The tradeoff between not repeating oneself and achieving full server-side rendering support is discussed. User experience is deemed more important than developer experience.
Es hora de desfragmentar la web
React Day Berlin 2022React Day Berlin 2022
34 min
Es hora de desfragmentar la web
Top Content
Today's Talk introduces Mitosis, an open source project that solves the problem of building framework agnostic components. It supports JSX and Svelte syntax and outputs human-readable code for various web frameworks. Mitosis is already being used by enterprise customers and can be easily integrated with React, Svelte, and other frameworks. It saves time, allows for easy handling of framework version migrations, and enables efficient unit and integration testing.
Autoría de HTML en un Mundo JavaScript
React Summit US 2023React Summit US 2023
21 min
Autoría de HTML en un Mundo JavaScript
This Talk by Tony Alicia focuses on authoring HTML in a JavaScript world. The speaker challenges developers to change their approach to building React components by starting with HTML first. By authoring HTML in a semantic way, readability and maintainability can be improved. Well-authored HTML provides better understanding of content and improves accessibility. It also has performance benefits by reducing DOM size. Investing time in HTML can save time and make applications more future-proof.
Componentes Web, Lit y Santa 🎅
JSNation Live 2021JSNation Live 2021
28 min
Componentes Web, Lit y Santa 🎅
Web Components and the Lit library are introduced, highlighting their ability to create custom elements and replicate built-in components with different functionality. The use of semantic HTML and the benefits of web components in development are emphasized. The features of Lit, such as data binding and rendering, are discussed. The Santa Tracker is showcased as an example of web components being used in educational games. The compatibility of web components with other frameworks and their versatility in creating small widgets or large applications are highlighted.
¿Cómo el Shadow DOM te tiene cubierto?
React Day Berlin 2023React Day Berlin 2023
18 min
¿Cómo el Shadow DOM te tiene cubierto?
The Shadow DOM allows for encapsulation and composability, enabling elements to have their own features without affecting the rest of the webpage. Custom elements in the Shadow DOM have their own behavior through encapsulation and scoped styles. Composability is key in software development, allowing for dynamic data passing. The Shadow DOM provides a way to modify the appearance of elements within it, but some properties are marked as important and cannot be changed. Building a Chrome extension using the Shadow DOM allows for composable and encapsulated experiences.
¡Los componentes web son increíbles!
JSNation 2022JSNation 2022
10 min
¡Los componentes web son increíbles!
Web components allow you to create your own HTML elements that can do anything you want, and they are supported by all modern browsers. Many companies, including YouTube and GitHub, use web components to enhance their websites. There are extensive tooling and libraries available for web component development. The Model Viewer Web Component enables the display of 3D models in Virtual and Augmented Reality without needing to know underlying technologies. Web components can be used with various frameworks and libraries, and there are resources available to help with compatibility.

Workshops on related topic

Despliega una aplicación de componentes web y configura un flujo de integración continua
DevOps.js Conf 2022DevOps.js Conf 2022
111 min
Despliega una aplicación de componentes web y configura un flujo de integración continua
Workshop
Philippe Ozil
Philippe Ozil
Únete a nosotros en un masterclass en el que desplegarás una aplicación Node.js simple construida con componentes web y configurarás un flujo de integración continua (CI). Aprenderás sobre el poder del Lightning Web Runtime (LWR) y las GitHub Actions.
Componentes Web en Acción
JSNation Live 2021JSNation Live 2021
184 min
Componentes Web en Acción
Workshop
Joren Broekema
Alex Korzhikov
2 authors
El masterclass amplía el conocimiento del lenguaje de programación JavaScript, revisa los patrones generales de diseño de software. Se centra en los estándares y tecnologías de los Componentes Web, como Lit-HTML y Lit-Element. También practicamos la escritura de Componentes Web tanto con JavaScript nativo como con Lit-Element. Al final, revisamos las herramientas clave para desarrollar una aplicación: open-wc.