Product Reviews Section

Customer Reviews

4.8(128 reviews)
Sarah M.
Sarah M.Verified
2 days ago

Absolutely love it!

The quality exceeded my expectations. Shipping was fast and the packaging was beautiful. Would definitely recommend to anyone looking for premium products.

James K.
James K.Verified
1 week ago

Great product, minor issue

Overall very happy with my purchase. The only reason for 4 stars is the delivery took a bit longer than expected. Product itself is fantastic.

E
Emily R.
2 weeks ago

Perfect gift

Bought this as a gift and it was a huge hit! Beautiful craftsmanship and attention to detail. Will be ordering more.

M
Michael T.
3 weeks ago

Solid quality

Very impressed with the build quality. Looks exactly like the photos. Would buy again.

About this block

Product Reviews SectionFREE

Customer reviews with star ratings, verified badges, helpful voting, and load more functionality. Displays average rating summary. Perfect for building trust and social proof on product pages.

Ecommerce6: Product Reviews Section

Customer review list for product pages: an average-rating summary with a "Write a Review" button up top, then individual reviews with an avatar, verified badge, star rating, title, body copy, and a "Helpful" vote button, ending in an optional "Load More" footer.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/ecommerce6"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/ecommerce6"

This installs the block to components/beste/block/ecommerce6.tsx and the Badge and Button shadcn/ui primitives it uses.

Quick start

The installed file exports ecommerce6Demo alongside the block: the exact props behind the preview above. Spread it to get a working reviews section in one line.

tsx
import { Ecommerce6, ecommerce6Demo } from "@/components/beste/block/ecommerce6";

export default function ProductPage() {
  return <Ecommerce6 {...ecommerce6Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Ecommerce6 } from "@/components/beste/block/ecommerce6";

export default function ProductPage() {
  return (
    <Ecommerce6
      heading="Customer Reviews"
      averageRating={4.6}
      totalReviews={42}
      reviews={[
        {
          id: "rev-1",
          author: "Sarah M.",
          rating: 5,
          date: "2 days ago",
          title: "Absolutely love it!",
          content: "Quality exceeded my expectations, shipping was fast.",
          helpful: 24,
          verified: true,
        },
        {
          id: "rev-2",
          author: "James K.",
          rating: 4,
          date: "1 week ago",
          title: "Great product",
          content: "Very happy overall, delivery took a bit longer than expected.",
          helpful: 12,
        },
      ]}
      onHelpful={(id) => console.log("helpful vote", id)}
      onLoadMore={() => console.log("load more reviews")}
    />
  );
}

Props

PropTypeDefaultDescription
headingstringSection heading
averageRatingnumberSummary star rating; hidden unless both this and totalReviews are set
totalReviewsnumberTotal review count shown next to the summary rating
reviewsReview[][]Individual reviews rendered in a list
onLoadMore() => voidCalled by the footer "Load More Reviews" button; the button is hidden entirely when omitted
onHelpful(reviewId: string) => voidCalled with a review's id when its "Helpful" button is pressed
classNamestringExtra classes for the outer <section>
ts
type Review = {
  id: string;
  author: string;
  avatar?: string;
  rating: number;
  date: string;
  title: string;
  content: string;
  helpful?: number;
  verified?: boolean;
};

Behavior notes

  • The average-rating summary (averageRating / totalReviews) only renders when both are truthy; each individual review always shows its own 5-star row regardless, using Math.floor on rating to decide filled stars (size-5 in the summary, size-3 per review).
  • onHelpful fires with the review's id, and the "Helpful (N)" button itself only renders when helpful is defined on that review, a review that omits the field shows no vote button at all, even at zero votes.
  • onLoadMore gates the entire footer button: omit the prop and "Load More Reviews" doesn't render, rather than rendering it disabled.
  • The "Write a Review" button at the top has no onClick wired to any prop; it's static chrome the installer has to hook up separately.
  • Reviewer photos are a plain <img> circle, not the shadcn Avatar primitive; a missing avatar falls back to a muted circle showing the author's first initial.

More Ecommerce blocks

View all Ecommerce
PRO

ecommerce35

Product Reviews Grid

Review cards with star ratings, product thumbnails, verified badges, and helpfulness counts. Perfect for social proof and testimonial sections.

PRO

ecommerce3

Shopping Cart with Summary

Cart page with item cards, quantity controls, and order summary with shipping calculation. Perfect for checkout flows and cart review pages.

FREE

ecommerce1

Product Card Grid

Responsive product grid with ratings, sale badges, and add to cart buttons. Perfect for shop pages and product catalogs.

PRO

ecommerce43

Product Information Tabs

Tabbed product details with description, feature list, specifications table, customer reviews with ratings, and shipping information. Perfect for comprehensive product pages with detailed information.

PRO

ecommerce19

Gift Card Redemption Form

Code input form with loading states, validation, and balance display on success. Perfect for checkout pages and account credit sections.

PRO

ecommerce14

Related Products Grid

Product recommendations grid with images, prices, and add to cart buttons. Perfect for cross-selling and upselling on product pages.