rc-slider vs react-slider vs react-range vs react-compound-slider vs react-input-range vs react-input-slider
React Slider Libraries Comparison
1 Year
rc-sliderreact-sliderreact-rangereact-compound-sliderreact-input-rangereact-input-sliderSimilar Packages:
What's React Slider Libraries?

These libraries provide various implementations of sliders for React applications, allowing users to select values from a range. Each library has its own unique features, design principles, and use cases, catering to different needs in user interface design. They enhance user experience by providing intuitive controls for selecting numerical values, making them essential for forms, settings, and interactive applications.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
rc-slider2,169,9113,060173 kB2742 months agoMIT
react-slider208,549896269 kB402 years agoMIT
react-range169,41487174.3 kB196 months agoMIT
react-compound-slider77,732621401 kB243 years agoMIT
react-input-range61,903715-1307 years agoMIT
react-input-slider11,820142-164 years agoMIT
Feature Comparison: rc-slider vs react-slider vs react-range vs react-compound-slider vs react-input-range vs react-input-slider

Customization

  • rc-slider:

    rc-slider offers extensive customization options, allowing developers to modify styles, colors, and behavior through props and CSS. You can easily create a unique look and feel that matches your application's design requirements.

  • react-slider:

    react-slider provides basic customization options, focusing on ease of use and quick implementation. It is best for simple applications where advanced styling is not a priority.

  • react-range:

    react-range offers a good balance of customization and simplicity, allowing developers to adjust styles while maintaining a clean and modern design. It is ideal for responsive applications that need to adapt to various screen sizes.

  • react-compound-slider:

    react-compound-slider is designed for flexibility, enabling developers to create custom components for handles, tracks, and tooltips. This allows for a high degree of customization, making it suitable for complex UI designs.

  • react-input-range:

    react-input-range provides basic styling options, but it is more limited in customization compared to others. It is best for developers who want a quick and easy implementation without needing extensive design changes.

  • react-input-slider:

    react-input-slider is minimalistic and allows for basic customization, focusing on simplicity and ease of use. It is suitable for projects that do not require extensive styling options.

Complexity

  • rc-slider:

    rc-slider is relatively complex due to its extensive feature set, making it suitable for applications that require detailed control and advanced functionalities.

  • react-slider:

    react-slider is simple and easy to use, making it suitable for quick implementations without the need for complex configurations.

  • react-range:

    react-range strikes a balance between complexity and usability, allowing for both simple and advanced implementations depending on the developer's needs.

  • react-compound-slider:

    react-compound-slider is designed for complex use cases, allowing for multiple handles and custom components, making it ideal for advanced developers.

  • react-input-range:

    react-input-range is straightforward and easy to implement, making it suitable for beginners or projects that do not require complex features.

  • react-input-slider:

    react-input-slider is designed to be simple and lightweight, making it easy to integrate into any project without a steep learning curve.

Accessibility

  • rc-slider:

    rc-slider includes accessibility features, such as keyboard navigation and ARIA attributes, making it suitable for applications that prioritize inclusivity.

  • react-slider:

    react-slider provides basic accessibility support, making it suitable for applications that need simple input controls.

  • react-range:

    react-range includes accessibility features, ensuring that users can interact with the slider using keyboard controls and screen readers.

  • react-compound-slider:

    react-compound-slider supports accessibility with custom components, allowing developers to ensure their sliders are usable for all users, including those with disabilities.

  • react-input-range:

    react-input-range provides basic accessibility features, but may require additional work to ensure full compliance with accessibility standards.

  • react-input-slider:

    react-input-slider has limited accessibility features, focusing more on simplicity rather than comprehensive support for all users.

Performance

  • rc-slider:

    rc-slider is optimized for performance, handling multiple handles and complex interactions efficiently without significant lag.

  • react-slider:

    react-slider is lightweight and performs well for basic use cases, ensuring quick and responsive interactions.

  • react-range:

    react-range is optimized for modern web applications, providing smooth performance across different devices and screen sizes.

  • react-compound-slider:

    react-compound-slider is designed for performance in complex scenarios, ensuring smooth interactions even with multiple handles and custom components.

  • react-input-range:

    react-input-range is lightweight and performs well in simple use cases, making it suitable for applications with basic slider needs.

  • react-input-slider:

    react-input-slider is minimalistic and performs efficiently, focusing on quick interactions and low overhead.

Community Support

  • rc-slider:

    rc-slider has a large community and extensive documentation, making it easy to find support and resources for implementation.

  • react-slider:

    react-slider has a small but active community, providing basic support and resources for simple implementations.

  • react-range:

    react-range has a growing community and decent documentation, making it suitable for developers looking for modern slider solutions.

  • react-compound-slider:

    react-compound-slider has a smaller community but offers good documentation, suitable for developers who are comfortable with custom implementations.

  • react-input-range:

    react-input-range has a moderate community and documentation, providing enough resources for basic usage and troubleshooting.

  • react-input-slider:

    react-input-slider has limited community support, focusing on simplicity and ease of use without extensive resources.

How to Choose: rc-slider vs react-slider vs react-range vs react-compound-slider vs react-input-range vs react-input-slider
  • rc-slider:

    Choose rc-slider if you need a highly customizable slider with a wide range of features, including support for multiple handles and tooltips. It is suitable for applications that require detailed control over the slider's appearance and behavior.

  • react-slider:

    Select react-slider for a straightforward and easy-to-use slider that offers basic functionality without the need for complex configurations. It is ideal for simple applications where quick implementation is a priority.

  • react-range:

    Choose react-range if you are looking for a highly customizable slider that supports both single and range selections. It is suitable for applications that require a modern design and responsive behavior across different devices.

  • react-compound-slider:

    Opt for react-compound-slider if you need a flexible and composable slider solution that allows for complex interactions and custom components. This library is ideal for advanced use cases where you want to build a slider with unique functionalities and designs.

  • react-input-range:

    Select react-input-range for a simple and straightforward slider that is easy to implement and use. It is perfect for applications where you need a basic range input without extensive customization requirements.

  • react-input-slider:

    Use react-input-slider if you want a lightweight and minimalistic slider that provides a clean interface for inputting values. This library is great for projects that prioritize simplicity and ease of use.

README for rc-slider

rc-slider

Slider UI component for React

NPM version npm download build status Codecov bundle size dumi

Install

rc-slider

Example

npm start and then go to http://localhost:8000

Online examples: https://slider.react-component.now.sh/

Usage

Slider

import Slider from 'rc-slider';
import 'rc-slider/assets/index.css';

export default () => (
  <>
    <Slider />
  </>
);

Range

Please refer to #825 for information regarding usage of Range. An example:

import Slider, { Range } from 'rc-slider';
import 'rc-slider/assets/index.css';

export default () => (
  <>
    <Slider range />
  </>
);

Compatibility

| IE / Edge
IE / Edge | Firefox
Firefox | Chrome
Chrome | Safari
Safari | Electron
Electron | | --- | --- | --- | --- | --- | | IE11, Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions |

API

createSliderWithTooltip(Slider | Range) => React.Component

An extension to make Slider or Range support Tooltip on handle.

const Slider = require('rc-slider');
const createSliderWithTooltip = Slider.createSliderWithTooltip;
const Range = createSliderWithTooltip(Slider.Range);

Online demo

After Range or Slider was wrapped by createSliderWithTooltip, it will have the following props:

| Name | Type | Default | Description | | ------------ | ------- | ------- | ----------- | | tipFormatter | (value: number): React.ReactNode | value => value | A function to format tooltip's overlay | | tipProps | Object | {
placement: 'top',
prefixCls: 'rc-slider-tooltip',
overlay: tipFormatter(value)
} | A function to format tooltip's overlay |

Common API

The following APIs are shared by Slider and Range.

| Name | Type | Default | Description | | ------------ | ------- | ------- | ----------- | | className | string | '' | Additional CSS class for the root DOM node | | min | number | 0 | The minimum value of the slider | | max | number | 100 | The maximum value of the slider | | id | string | '' | Unique identifier for the component, used for accessibility | | marks | {number: ReactNode} or{number: { style, label }} | {} | Marks on the slider. The key determines the position, and the value determines what will show. If you want to set the style of a specific mark point, the value should be an object which contains style and label properties. | | step | number or null | 1 | Value to be added or subtracted on each step the slider makes. Must be greater than zero, and max - min should be evenly divisible by the step value.
When marks is not an empty object, step can be set to null, to make marks as steps. | | vertical | boolean | false | If vertical is true, the slider will be vertical. | | handle | (props) => React.ReactNode | | A handle generator which could be used to customized handle. | | included | boolean | true | If the value is true, it means a continuous value interval, otherwise, it is a independent value. | | reverse | boolean | false | If the value is true, it means the component is rendered reverse. | | disabled | boolean | false | If true, handles can't be moved. | | keyboard | boolean | true | Support using keyboard to move handlers. | | dots | boolean | false | When the step value is greater than 1, you can set the dots to true if you want to render the slider with dots. | | onBeforeChange | Function | NOOP | onBeforeChange will be triggered when ontouchstart or onmousedown is triggered. | | onChange | Function | NOOP | onChange will be triggered while the value of Slider changing. | | onChangeComplete | Function | NOOP | onChangeComplete will be triggered when ontouchend or onmouseup is triggered. | | minimumTrackStyle | Object | | please use trackStyle instead. (only used for slider, just for compatibility , will be deprecate at rc-slider@9.x ) | | maximumTrackStyle | Object | | please use railStyle instead (only used for slider, just for compatibility , will be deprecate at rc-slider@9.x) | | handleStyle | Array[Object] | Object | [{}] | The style used for handle. (both for slider(Object) and range(Array of Object), the array will be used for multi handle following element order) | | trackStyle | Array[Object] | Object | [{}] | The style used for track. (both for slider(Object) and range(Array of Object), the array will be used for multi track following element order)| | railStyle | Object | {} | The style used for the track base color. | | dotStyle | Object | (dotValue) => Object | {} | The style used for the dots. | | activeDotStyle | Object | (dotValue) => Object | {} | The style used for the active dots. |

Slider

| Name | Type | Default | Description | | ------------ | ------- | ------- | ----------- | | defaultValue | number | 0 | Set initial value of slider. | | value | number | - | Set current value of slider. | | startPoint | number | undefined | Track starts from this value. If undefined, min is used. | | tabIndex | number | 0 | Set the tabIndex of the slider handle. | | ariaLabelForHandle | string | - | Set the aria-label attribute on the slider handle. | | ariaLabelledByForHandle | string | - | Set the aria-labelledby attribute on the slider handle. | | ariaRequired | boolean | - | Set the aria-required attribute on the slider handle. | | ariaValueTextFormatterForHandle | (value) => string | - | A function to set the aria-valuetext attribute on the slider handle. It receives the current value of the slider and returns a formatted string describing the value. See WAI-ARIA Authoring Practices 1.1 for more information. |

Range

| Name | Type | Default | Description | | ------------ | ------- | ------- | ----------- | | defaultValue | number[] | [0, 0] | Set initial positions of handles. | | value | number[] | | Set current positions of handles. | | tabIndex | number[] | [0, 0] | Set the tabIndex of each handle. | | ariaLabelGroupForHandles | Array[string] | - | Set the aria-label attribute on each handle. | | ariaLabelledByGroupForHandles | Array[string] | - | Set the aria-labelledby attribute on each handle. | | ariaValueTextFormatterGroupForHandles | Array[(value) => string] | - | A function to set the aria-valuetext attribute on each handle. It receives the current value of the slider and returns a formatted string describing the value. See WAI-ARIA Authoring Practices 1.1 for more information. | | count | number | 1 | Determine how many ranges to render, and multiple handles will be rendered (number + 1). | | allowCross | boolean | true | allowCross could be set as true to allow those handles to cross. | | pushable | boolean or number | false | pushable could be set as true to allow pushing of surrounding handles when moving a handle. When set to a number, the number will be the minimum ensured distance between handles. Example: | | draggableTrack | boolean | false | Open the track drag. open after click on the track will be invalid. |

SliderTooltip

The Tooltip Component that keep following with content.

Development

npm install
npm start

Test Case

npm run test

Coverage

npm run coverage

License

rc-slider is released under the MIT license.