React Native Ratings Component

8.1.0 · active · verified Tue Apr 21

react-native-ratings is a UI component library providing flexible star rating components for React Native applications. It supports both tap and swipe gestures for rating input, offering two main components: `Rating` for generic star ratings with various customization options (like custom images, types such as 'heart' or 'rocket'), and `AirbnbRating` which mimics Airbnb's rating style with review labels. The current stable version is 8.1.0, and the library maintains a fairly active release cadence, with frequent patch and minor updates addressing bugs and adding small features. A key differentiator is its out-of-the-box support for both tap and swipe interactions, custom iconography, and integrated TypeScript types since v8.0.1, making it a robust solution for user feedback collection.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to integrate `Rating` and `AirbnbRating` components, handle user selections, and customize ratings with different types, review labels, and custom images, all within a functional React Native component using hooks.

import React, { useState } from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { Rating, AirbnbRating } from 'react-native-ratings';

const WATER_IMAGE = require('./water.png'); // Ensure 'water.png' is in your project assets

export default function App() {
  const [tapRating, setTapRating] = useState(3);
  const [airbnbRating, setAirbnbRating] = useState(5);
  const [customRating, setCustomRating] = useState(7);

  const handleTapRatingComplete = (rating: number) => {
    console.log("Tap Rating set to: " + rating);
    setTapRating(rating);
  };

  return (
    <View style={styles.container}>
      <Text style={styles.header}>Airbnb Rating Example</Text>
      <AirbnbRating
        count={11}
        reviews={["Terrible", "Bad", "Meh", "OK", "Good", "Hmm...", "Very Good", "Wow", "Amazing", "Unbelievable", "Jesus"]}
        defaultRating={airbnbRating}
        size={20}
        onFinishRating={(rating) => setAirbnbRating(rating)}
      />

      <Text style={styles.header}>Star Rating Example</Text>
      <Rating
        showRating
        onFinishRating={handleTapRatingComplete}
        style={{ paddingVertical: 10 }}
        startingValue={tapRating}
      />

      <Text style={styles.header}>Heart Rating Example</Text>
      <Rating
        type='heart'
        ratingCount={3}
        imageSize={60}
        showRating
        onFinishRating={(rating) => console.log("Heart Rating: " + rating)}
      />

      <Text style={styles.header}>Custom Image Rating</Text>
      <Rating
        type='custom'
        ratingImage={WATER_IMAGE}
        ratingColor='#3498db'
        ratingBackgroundColor='#c8c7c8'
        ratingCount={10}
        imageSize={30}
        onFinishRating={(rating) => setCustomRating(rating)}
        style={{ paddingVertical: 10 }}
        startingValue={customRating}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
    paddingTop: 50,
  },
  header: {
    fontSize: 20,
    marginTop: 20,
    marginBottom: 10,
    fontWeight: 'bold',
  }
});

view raw JSON →