Slots, Slots, Slots, Everybody!

Bookmark
Rate this content

Let's use slots to fill Lil Jon's club with people! Starting with web components, we'll walk through how to use slots to make highly extensible wrappers for dynamic content. Then we'll talk about how Vue and Angular leverage this HTML feature and how React children are different.

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

FAQ

Slots are placeholders in components that allow you to pass dynamic content into them. In Vue and Angular, they extend the web component spec to provide this functionality, allowing for more flexible and reusable components.

No, React does not use slots. Instead, React uses the children prop to pass content into components, allowing for similar flexibility without the slot syntax.

The shadow DOM is used in custom elements to encapsulate the DOM structure and styles, preventing them from being affected by the rest of the document's styles and scripts.

In Vue, named slots are implemented using the template tag with the v-slot directive. You specify the slot name using the v-slot:slotName syntax, and pass content to these slots using the corresponding slot attribute.

Content projection in Angular is similar to slots in Vue and web components. It uses the ng-content tag to define where dynamic content should be inserted within a component's template.

CSS styles defined outside the shadow DOM do not affect its content. Styles must be defined within the shadow DOM to apply to its elements, ensuring encapsulation.

Default slots are unnamed and used for unspecified content, while named slots have a specific name and are used for content passed with a matching slot attribute.

Conditional rendering in Vue can be achieved using the v-if directive on elements that contain slots, allowing you to render content based on certain conditions.

Yes, Angular allows the use of CSS selectors with the ng-project-as attribute to match and project content into specific slots, based on element attributes or classes.

In web components, slots work by using a template tag with a slot tag inside it. You can pass content to these slots, which will replace the default content defined in the template when the component is rendered.

Abbey Perini
Abbey Perini
20 min
21 Nov, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Abbe explains how slots enhance dynamic content in components and demonstrates creating a custom element with the shadow DOM. The content covers utilizing slot attributes for named slots and slot buttons for navigation within components. It explores styling effects on components, default and named slots usage in Vue components, access and management of slot props using scoped default slots in Vue, and dynamic list creation with JavaScript destructuring in Vue components. Additionally, it discusses name slots in Angular for content projection, CSS selector matching, slot selectors, conditional content projection with ng-template, and view encapsulation modes like Shadow DOM API.
Available in Español: ¡Slots, Slots, Slots, Todos!
Video transcription and chapters available for users with access.

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

The Good, The Bad, and The Web Components
JSNation 2023JSNation 2023
29 min
The Good, The Bad, and The Web Components
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.
It's Time to De-Fragment the Web
React Day Berlin 2022React Day Berlin 2022
34 min
It's Time to De-Fragment the 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.
Authoring HTML in a JavaScript World
React Summit US 2023React Summit US 2023
21 min
Authoring HTML in a JavaScript World
Watch video: Authoring HTML in a JavaScript World
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.
Web Components, Lit and Santa 🎅
JSNation Live 2021JSNation Live 2021
28 min
Web Components, Lit and 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.
How the Shadow DOM has Got You Covered?
React Day Berlin 2023React Day Berlin 2023
18 min
How the Shadow DOM has Got You Covered?
Watch video: How the Shadow DOM has Got You Covered?
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.
Immutable Web Apps
JSNation 2022JSNation 2022
20 min
Immutable Web Apps
Today's Talk discusses immutable web apps and their benefits, such as faster loading times and easy version tracking. The use of Universal Module Definition (UMD) style bundling allows for flexible dependency management and gradual upgrades. Tools like Webpack and Rollup provide ways to reference UMDs in bundles and automate dependency configuration. Arborist and YAML files help resolve dependency trees and handle conflicts, while the Orchard CLI tool automates dependency ordering. Internal and external dependencies can be initialized and managed effectively for optimal performance.

Workshops on related topic

Web Components in Action
JSNation Live 2021JSNation Live 2021
184 min
Web Components in Action
Workshop
Joren Broekema
Alex Korzhikov
2 authors
The workshop extends JavaScript programming language knowledge, overviews general software design patterns. It is focused on Web Components standards and technologies built on top of them, like Lit-HTML and Lit-Element. We also practice writing Web Components both with native JavaScript and using Lit-Element. In the end we overview key tooling to develop an application - open-wc.