Not able to render react-rating-star component with correct value

The blog explains how to fix incorrect star rendering in react-rating-stars-component with async data using state management and the key prop for accuracy.

When using the react-rating-stars-component in a React app, developers often find that the component doesn’t render the correct value especially when the rating comes from asynchronous sources like APIs or Firestore.

At a Glance Solution

The react-rating-star component expects a numeric value prop. Make sure the data you’re passing is a number and handle any asynchronous data fetching or state updates correctly to reflect the desired rating dynamically.

Why This Error Happens

The react-rating-star component uses the value prop to determine how many stars to show. Common reasons for incorrect rendering are passing undefined, null or a non-numeric value to this prop or not handling the asynchronous nature of data fetching so the component renders before the rating value is available. Also improper state management when the rating changes can also cause display issues.

Prerequisites

  • React: v16.8 or newer (for hooks support)
  • react-rating-stars-component: Installed via npm/yarn
  • Data source: Rating value fetched asynchronously (API, Firestore, etc.)
  • Basic knowledge of React hooks (useState, useEffect)
  • Component import:
import ReactStars from "react-rating-stars-component";

Step‑by‑Step Guide

Add a live star‑rating widget in three swift moves install the library, fetch the score, then render it only when the data’s ready.

Step 1: Install the star rating component

npm install react-rating-stars-component

Step 2: Fetch the rating and manage loading state

// TypeScript/React codeconst [rating, setRating] = useState<number | null>(null); // null indicates loading   useEffect(() => {   fetchRatingFromAPI().then(fetchedRating => setRating(fetchedRating)); }, []);

Step 3: Render ReactStars only after the rating is loaded, and use a dynamic key

{rating !== null && (  <ReactStars     key={rating} // Forces re-mount when rating changes     value={rating}     count={5}     size={24}     isHalf={true}     edit={false}     activeColor="#ffd700"     // ...other props   /> )}
Also Read: Best IDE for React JS: Top Tools for Seamless Development

Full Working Example

import React, { useEffect, useState } from "react";import ReactStars from "react-rating-stars-component";   // Simulated async fetch function const fetchRatingFromAPI = async (): Promise<number> => {   // Simulate network delay   return new Promise(resolve => setTimeout(() => resolve(3.5), 500)); };   const StarRatingDisplay: React.FC = () => {   const [rating, setRating] = useState<number | null>(null);     useEffect(() => {     fetchRatingFromAPI().then(fetchedRating => setRating(fetchedRating));   }, []);     if (rating === null) {     return <div>Loading rating...</div>; // Show loader while fetching   }     return (     <div>       <h3>Star Rating</h3>       <ReactStars         key={rating} // Ensures re-mount when rating changes         value={rating}         count={5}         size={24}         isHalf={true}         edit={false}         activeColor="#ffd700"       />       <p>{rating} stars</p>     </div>   ); };   export default StarRatingDisplay;
// The key={rating} prop is critical to force the component to update when the rating changes.

Common Pitfalls & Troubleshooting

Pitfall

Example

Fix

Rating always shows 0 Fetch updates state, but stars stay at 0 Add key={rating} to ReactStars to force re-mount2
Component renders before data value={rating} where rating is undefined Use a loading state and render only when ready1
Direct DOM manipulation Using getElementById to set values Always use React state, not direct DOM methods2

Wrap‑Up & Next Steps

By managing loading state and forcing the react-rating-stars-component to re-mount using a dynamic key prop, you ensure the correct rating value is always displayed, even with async data sources.
Related

Why am I getting this problem? If you apply separate filters in sequence or only check one property at a time your code will match…

22 Oct, 2025

Why am I getting this problem? By default, rendering a table in React just displays data in its original order. Clicking the header won’t sort…

15 Oct, 2025

Understanding the Problem When building React applications, especially Single Page Applications (SPAs) using React Router, you might expect the page to scroll to the top…

10 Oct, 2025