rc-slider vs react-compound-slider vs react-input-slider vs react-range vs react-slider
React Slider Libraries
rc-sliderreact-compound-sliderreact-input-sliderreact-rangereact-sliderSimilar Packages:

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.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
rc-slider03,092173 kB2796 months agoMIT
react-compound-slider0620401 kB244 years agoMIT
react-input-slider0140-165 years agoMIT
react-range087774.3 kB202 years agoMIT
react-slider0914269 kB433 years agoMIT

Feature Comparison: rc-slider vs react-compound-slider vs react-input-slider vs react-range vs react-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-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.

  • 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-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.

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-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.

  • 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-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.

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-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.

  • 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-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.

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-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;
    
  • 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-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;
    

How to Choose: rc-slider vs react-compound-slider vs react-input-slider vs react-range vs react-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-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.

  • 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-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.

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, Edgelast 2 versionslast 2 versionslast 2 versionslast 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:

NameTypeDefaultDescription
tipFormatter(value: number): React.ReactNodevalue => valueA function to format tooltip's overlay
tipPropsObject{
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.

NameTypeDefaultDescription
classNamestring''Additional CSS class for the root DOM node
minnumber0The minimum value of the slider
maxnumber100The maximum value of the slider
idstring''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.
stepnumber or null1Value 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.
verticalbooleanfalseIf vertical is true, the slider will be vertical.
handle(props) => React.ReactNodeA handle generator which could be used to customized handle.
includedbooleantrueIf the value is true, it means a continuous value interval, otherwise, it is a independent value.
reversebooleanfalseIf the value is true, it means the component is rendered reverse.
disabledbooleanfalseIf true, handles can't be moved.
keyboardbooleantrueSupport using keyboard to move handlers.
dotsbooleanfalseWhen the step value is greater than 1, you can set the dots to true if you want to render the slider with dots.
onBeforeChangeFunctionNOOPonBeforeChange will be triggered when ontouchstart or onmousedown is triggered.
onChangeFunctionNOOPonChange will be triggered while the value of Slider changing.
onChangeCompleteFunctionNOOPonChangeComplete will be triggered when ontouchend or onmouseup is triggered.
minimumTrackStyleObjectplease use trackStyle instead. (only used for slider, just for compatibility , will be deprecate at rc-slider@9.x )
maximumTrackStyleObjectplease use railStyle instead (only used for slider, just for compatibility , will be deprecate at rc-slider@9.x)
handleStyleArray[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)
trackStyleArray[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)
railStyleObject{}The style used for the track base color.
dotStyleObject | (dotValue) => Object{}The style used for the dots.
activeDotStyleObject | (dotValue) => Object{}The style used for the active dots.

Slider

NameTypeDefaultDescription
defaultValuenumber0Set initial value of slider.
valuenumber-Set current value of slider.
startPointnumberundefinedTrack starts from this value. If undefined, min is used.
tabIndexnumber0Set the tabIndex of the slider handle.
ariaLabelForHandlestring-Set the aria-label attribute on the slider handle.
ariaLabelledByForHandlestring-Set the aria-labelledby attribute on the slider handle.
ariaRequiredboolean-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

NameTypeDefaultDescription
defaultValuenumber[][0, 0]Set initial positions of handles.
valuenumber[]Set current positions of handles.
tabIndexnumber[][0, 0]Set the tabIndex of each handle.
ariaLabelGroupForHandlesArray[string]-Set the aria-label attribute on each handle.
ariaLabelledByGroupForHandlesArray[string]-Set the aria-labelledby attribute on each handle.
ariaValueTextFormatterGroupForHandlesArray[(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.
countnumber1Determine how many ranges to render, and multiple handles will be rendered (number + 1).
allowCrossbooleantrueallowCross could be set as true to allow those handles to cross.
pushableboolean or numberfalsepushable 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:
draggableTrackbooleanfalseOpen 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.