Creating an engaging user interface is crucial for any application, and a star rating component is a fantastic way to allow users to provide feedback in a fun and interactive way. In this blog post, I’ll walk you through the steps to Create a Star Rating Component in LWC. So, let’s make your app’s feedback experience more delightful!
Step-by-Step Guide to Create a Star Rating Component in LWC

Creating a star rating component involves a few steps – from setting up the LWC environment to writing the actual code for the functionality. Let’s break it down.
To create the ⭐⭐⭐⭐⭐ Star Rating component we are going to use External JS.
- Click here to download js
- Create a static resource named “fivestar“

Creating the LWC Component
Once your environment is ready, it’s time to create the LWC component. Here’s how:
- Open Visual Studio Code and create a new LWC component.
- Name your component, something like “fiveStarRatingUpdated” to keep it descriptive.
fiveStarRatingUpdated.html
<!--
@description :
@author : Abhishek Verma
@group :
@last modified on : 02-15-2024
@last modified by : Abhishek Verma
-->
<template>
<lightning-card variant="Narrow" title="Please rate Abhishek Verma">
<div class="slds-p-horizontal_small" align="center">
<ul class={starClass}></ul>
</div>
</lightning-card>
</template>
fiveStarRatingUpdated.js
import fivestar from '@salesforce/resourceUrl/fivestar';
import { LightningElement, api } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { loadStyle, loadScript } from 'lightning/platformResourceLoader';
// add constants here
const ERROR_TITLE = 'Error loading five-star';
const ERROR_VARIANT = 'error';
const EDITABLE_CLASS = 'c-rating';
const READ_ONLY_CLASS = 'readonly c-rating';
export default class FiveStarRating extends LightningElement {
//initialize public readOnly and value properties
@api
readOnly;
@api
value;
editedValue;
isRendered;
//getter function that returns the correct class depending on if it is readonly
get starClass() {
return this.readOnly ? READ_ONLY_CLASS : EDITABLE_CLASS;
}
// Render callback to load the script once the component renders.
renderedCallback() {
if (this.isRendered) {
return;
}
this.loadScript();
this.isRendered = true;
}
//Method to load the 3rd party script and initialize the rating.
//call the initializeRating function after scripts are loaded
//display a toast with error message if there is an error loading script
loadScript() {
Promise.all([
loadScript(this, fivestar + '/rating.js'),
loadStyle(this, fivestar + '/rating.css')
]).then(() => {
this.initializeRating();
})
.catch(error => {
const toast = new ShowToastEvent({
title: ERROR_TITLE,
message: error.message,
variant: ERROR_VARIANT,
});
this.dispatchEvent(toast);
});
}
initializeRating() {
let domEl = this.template.querySelector('ul');
let maxRating = 5;
let self = this;
let callback = function (rating) {
self.editedValue = rating;
self.ratingChanged(rating);
};
this.ratingObj = window.rating(
domEl,
this.value,
maxRating,
callback,
this.readOnly
);
}
// Method to fire event called ratingchange with the following parameter:
// {detail: { rating: CURRENT_RATING }}); when the user selects a rating
ratingChanged(rating) {
const ratingchangeEvent = new CustomEvent('ratingchange', {
detail: {
rating: rating
}
});
this.dispatchEvent(ratingchangeEvent);
}
}
Conclusion
Congratulations! You’ve now created a fully functional star rating component in LWC. This component not only adds an interactive element to your application but also allows you to gather valuable feedback from your users in a visually appealing manner. Remember, the best way to learn is by doing, so I encourage you to experiment with different styles, animations, or even the number of stars.
Subscribe to my YouTube channel for more exciting videos on salesforce 👇
