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.