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

React Slider Libraries are specialized components designed to allow users to select a value or range of values from a predefined set by sliding a handle along a track. These libraries provide customizable, accessible, and interactive slider components that can be easily integrated into React applications. They are useful for inputting numerical values, adjusting settings, or selecting ranges in forms and user interfaces. Each library offers unique features, styles, and APIs, catering to different use cases and design requirements.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
rc-slider2,236,7493,064173 kB2752 months agoMIT
react-slider218,596897269 kB402 years agoMIT
react-range160,45987174.3 kB197 months agoMIT
react-compound-slider66,565620401 kB243 years agoMIT
react-input-slider13,020142-164 years agoMIT
Feature Comparison: rc-slider vs react-slider vs react-range vs react-compound-slider vs react-input-slider

Customization

  • rc-slider:

    rc-slider offers extensive customization options, including the ability to style the track, handles, and marks using CSS or inline styles. It also supports custom handle components, allowing for a high degree of visual and functional flexibility.

  • react-slider:

    react-slider offers good customization capabilities, allowing developers to style the slider, track, and handles using CSS. It also supports custom handle components, making it easy to create a unique look while keeping the implementation straightforward.

  • react-range:

    react-range supports customization of the slider’s track and handle styles through CSS. It encourages the use of styled components and provides a clean API for creating custom handles and tracks while maintaining accessibility features.

  • react-compound-slider:

    react-compound-slider provides a more programmatic approach to customization, allowing developers to create their own components for the track, handles, and labels. This library is designed for those who want to build highly customized slider interfaces from the ground up.

  • react-input-slider:

    react-input-slider allows for basic customization of the slider’s appearance, including handle size and track color. However, it is more limited compared to the others, focusing on simplicity and ease of use rather than extensive styling options.

Accessibility

  • rc-slider:

    rc-slider is designed with accessibility in mind, providing keyboard navigation and ARIA attributes. However, it requires some manual setup to ensure all features are fully accessible, especially for custom components.

  • react-slider:

    react-slider is built with accessibility in mind, offering keyboard navigation and support for screen readers. It provides ARIA attributes by default, making it a good option for accessible applications.

  • react-range:

    react-range prioritizes accessibility and follows WAI-ARIA guidelines closely. It provides excellent keyboard support and is designed to be fully accessible out of the box, making it a great choice for inclusive design.

  • react-compound-slider:

    react-compound-slider focuses on providing a solid foundation for accessibility, but it is up to the developer to implement ARIA attributes and keyboard interactions for their custom components. This allows for flexibility but requires more effort to ensure full accessibility.

  • react-input-slider:

    react-input-slider provides basic accessibility features, including keyboard navigation and screen reader support. Its simplicity makes it easy to use, but it may lack some advanced accessibility features found in more complex libraries.

Documentation and Community

  • rc-slider:

    rc-slider has comprehensive documentation, including examples and API references. It is part of the Ant Design ecosystem, which provides a large community and support for users.

  • react-slider:

    react-slider has good documentation with examples and customization guides. It is a popular choice among developers, which helps foster a helpful community for support and collaboration.

  • react-range:

    react-range provides excellent documentation focused on accessibility and best practices. The library is well-maintained, and its emphasis on inclusive design has attracted a supportive community.

  • react-compound-slider:

    react-compound-slider offers detailed documentation that emphasizes its composable nature. The community is smaller but active, with contributions from developers interested in building custom slider solutions.

  • react-input-slider:

    react-input-slider features straightforward documentation that covers its basic usage and customization. It is a smaller library with a growing community, making it easy to find help and examples.

Ease of Integration: Code Examples

  • rc-slider:

    Integrating rc-slider is straightforward, and its flexibility allows for quick implementation in various projects. Here’s a simple example:

    import React from 'react';
    import Slider from 'rc-slider';
    import 'rc-slider/assets/index.css';
    
    const App = () => {
      return (
        <div style={{ width: 400, margin: 50 }}>
          <Slider defaultValue={50} />
        </div>
      );
    };
    
    export default App;
    
  • react-slider:

    react-slider is easy to integrate and provides a good balance of customization and simplicity. Example:

    import React from 'react';
    import Slider from 'react-slider';
    
    const App = () => {
      return <Slider defaultValue={50} />;
    };
    
    export default App;
    
  • react-range:

    Integrating react-range is simple, and its focus on accessibility makes it a great choice for modern applications. Example:

    import React from 'react';
    import { Range } from 'react-range';
    
    const App = () => {
      return (
        <Range
          values={[50]}
          min={0}
          max={100}
          step={1}
          onChange={(values) => console.log(values)}
        />
      );
    };
    
    export default App;
    
  • react-compound-slider:

    react-compound-slider requires a bit more setup due to its composable nature, but it allows for highly customized implementations. Example:

    import React from 'react';
    import { Slider, Handle, Track } from 'react-compound-slider';
    
    const App = () => {
      return (
        <Slider>
          <Track>
            {({ getTrackProps }) => <div {...getTrackProps()} />}
          </Track>
          <Handle>
            {({ getHandleProps }) => <div {...getHandleProps()} />}
          </Handle>
        </Slider>
      );
    };
    
    export default App;
    
  • react-input-slider:

    react-input-slider is easy to integrate, especially for simple use cases. Example:

    import React from 'react';
    import InputSlider from 'react-input-slider';
    
    const App = () => {
      const [pos, setPos] = React.useState({ x: 50 });
      return (
        <InputSlider
          axis="x"
          x={pos.x}
          onChange={({ x }) => setPos({ x })}
        />
      );
    };
    
    export default App;
    
How to Choose: rc-slider vs react-slider vs react-range vs react-compound-slider vs react-input-slider
  • rc-slider:

    Choose rc-slider if you need a highly customizable and feature-rich slider with support for single, range, and multiple handles. It offers extensive API and styling capabilities, making it suitable for complex applications.

  • react-slider:

    Choose react-slider for a highly customizable and accessible slider component that supports both single and range sliders. It is a good choice for applications that need a balance of simplicity, accessibility, and customization.

  • react-range:

    Use react-range if you prioritize accessibility and want a modern, lightweight slider that follows the WAI-ARIA guidelines. It is suitable for projects that require a simple yet accessible range slider with good keyboard support.

  • react-compound-slider:

    Select react-compound-slider if you require a flexible and composable slider that allows for advanced customization and the creation of complex slider interfaces. It is ideal for projects that need a more hands-on approach to slider design.

  • react-input-slider:

    Opt for react-input-slider if you want a simple and lightweight slider that integrates well with input fields. It is perfect for applications that need a straightforward slider with minimal setup and a clean design.

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.