Skip to main content

Latest Post

Record Types & Page Layout Strategy

  Record Types & Page Layout Strategy 💬 In plain words:   Record Types let one object act like different forms for different teams. Different picklist values, page layouts, and processes — same Account object. Use them for truly different business processes. Not for cosmetic layout changes. 📌 Example:   One Account object, two businesses: 'Retail Customer' record type shows B2C picklist values and layout. 'Enterprise Client' shows contract fields and a different sales process. Same table, two costumes. 🧠 One object, many costumes:   A Record Type is a costume on the same object — different picklists and layouts, same table underneath. Concept Record Types split one object into business variants. •   Each type can carry its own subset of picklist values, its own business process — Lead, Case and Opportunity stages — and its own page layout per profile. •   Lightning has changed the calculus. Dynamic Forms and conditional comp...

Compose Components Using Slots vs Data in LWC Salesforce - Exploring the Differences with Example Code

Introduction:

In Salesforce Lightning Web Components (LWC), composing components is a fundamental aspect of building powerful and reusable user interfaces. LWC offers two main approaches for composing components: using slots and using data. In this blog post, we will delve into the differences between these two approaches and explore their implementation with example code.


1. Using Slots for Component Composition:


Slots provide a flexible way to compose components by allowing the parent component to inject content into specific areas of a child component's template. Let's understand how slots work with an example.


Consider a parent component called "ParentComponent" that wraps around a child component called "ChildComponent." In the parent component's template, you can define a slot using the <slot> tag. Here's an example of the parent component's template:


<template>

  <div>

    <h1>Parent Component</h1>

    <slot></slot>

  </div>

</template>


In this example, the <slot></slot> tag serves as a placeholder for content that will be injected from the parent component. Now, let's see how we can use slots to compose components.


<!-- ParentComponent.html -->

<template>

  <div>

    <h1>Parent Component</h1>

    <slot></slot>

  </div>

</template>


<!-- ChildComponent.html -->

<template>

  <div>

    <h2>Child Component</h2>

    <slot></slot>

  </div>

</template>


In this example, the parent component wraps around the child component and any content placed between the opening and closing tags of the parent component will be injected into the child component's slot. Here's an example usage:


<!-- Usage in another component -->

<c-parent-component>

  <p>This content will be injected into the slot of the child component.</p>

</c-parent-component>


The result of this composition would be:


<div>

  <h1>Parent Component</h1>

  <div>

    <h2>Child Component</h2>

    <p>This content will be injected into the slot of the child component.</p>

  </div>

</div>


2. Using Data for Component Composition:


Data-based composition, on the other hand, allows the parent component to pass data or properties to the child component for rendering. This approach is useful when you want to control the child component's behavior based on the parent's data.


Let's consider the same parent and child components from the previous example, but this time, we'll pass data from the parent component to the child component using properties.


<!-- ParentComponent.html -->

<template>

  <div>

    <h1>Parent Component</h1>

    <c-child-component message={message}></c-child-component>

  </div>

</template>


// ParentComponent.js

import { LightningElement } from 'lwc';


export default class ParentComponent extends LightningElement {

  message = 'Hello from the parent component!';

}


<!-- ChildComponent.html -->

<template>

  <div>

    <h2>Child Component</h2>

    <p>{message}</p>

  </div>

</template>


In this example, the parent component passes the message property to the child component. The child component then renders the value of `message` in its template.


<div>

  <h1>Parent Component</h1>

  <div>

    <h2>Child Component</h2>

   


 <p>Hello from the parent component!</p>

  </div>

</div>


Conclusion:


Both slots and data-based composition are powerful techniques for composing components in LWC Salesforce. Slots provide a flexible way to inject content into specific areas of a child component, while data-based composition allows the parent to pass data or properties to the child for rendering. Choosing between these approaches depends on your specific requirements and the level of control you need over the child component's behavior. By understanding and utilizing both approaches, you can build highly modular and reusable components in LWC.