@react-native-picker/picker vs react-native-picker-select vs react-native-dropdown-picker vs react-native-select-dropdown vs @react-native-community/picker
React Native Picker Libraries Comparison
1 Year
@react-native-picker/pickerreact-native-picker-selectreact-native-dropdown-pickerreact-native-select-dropdown@react-native-community/pickerSimilar Packages:
What's React Native Picker Libraries?

Picker libraries in React Native provide developers with customizable dropdown menus for selecting options in mobile applications. These libraries enhance user experience by allowing users to choose from a list of options in a visually appealing and interactive manner. Each library offers unique features and design principles, catering to different use cases and preferences in mobile app development.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
@react-native-picker/picker538,1201,601399 kB2222 months agoMIT
react-native-picker-select126,0041,79645.8 kB937 months agoMIT
react-native-dropdown-picker75,4551,015161 kB1642 years agoMIT
react-native-select-dropdown42,77535335.5 kB43a year agoMIT
@react-native-community/picker16,4451,601-2224 years agoMIT
Feature Comparison: @react-native-picker/picker vs react-native-picker-select vs react-native-dropdown-picker vs react-native-select-dropdown vs @react-native-community/picker

Customization

  • @react-native-picker/picker:

    Provides a good level of customization, allowing developers to style the picker component extensively. You can customize the appearance of the dropdown and selected item, making it suitable for various design requirements.

  • react-native-picker-select:

    Offers moderate customization options, allowing for custom styles and placeholder text. It is designed to be flexible while maintaining simplicity in implementation.

  • react-native-dropdown-picker:

    Highly customizable with options for styling, animations, and multi-select capabilities. Developers can easily change the look and feel of the dropdown to match their app's theme and user experience needs.

  • react-native-select-dropdown:

    Supports extensive customization, including styles for dropdown items, selected items, and placeholder text. It also allows for custom rendering of items, making it versatile for different use cases.

  • @react-native-community/picker:

    This package offers limited customization options, primarily focusing on basic styling. It allows developers to set styles for the picker but lacks advanced features for customization.

Multi-Select Support

  • @react-native-picker/picker:

    Does not provide built-in multi-select support, focusing instead on single item selection.

  • react-native-picker-select:

    This package does not natively support multi-select but can be adapted for such use cases with additional logic.

  • react-native-dropdown-picker:

    Supports multi-select out of the box, allowing users to select multiple options simultaneously, which is beneficial for applications requiring complex selections.

  • react-native-select-dropdown:

    Offers multi-select functionality, making it a great choice for applications that require users to select multiple items from a list.

  • @react-native-community/picker:

    This package does not support multi-select functionality, making it suitable only for single selections.

Ease of Use

  • @react-native-picker/picker:

    Easy to use with a clear API, suitable for developers who need a straightforward picker without complex configurations.

  • react-native-picker-select:

    Straightforward to use with clear documentation, making it accessible for developers of all skill levels.

  • react-native-dropdown-picker:

    User-friendly with a rich set of features that are easy to implement, making it suitable for developers looking for advanced functionality without a steep learning curve.

  • react-native-select-dropdown:

    Designed for ease of use, with a simple API and good documentation, making it easy to integrate into projects.

  • @react-native-community/picker:

    Simple to implement with minimal setup required, making it a good choice for beginners or simple applications.

Performance

  • @react-native-picker/picker:

    Optimized for performance across both iOS and Android, ensuring smooth interactions even with larger datasets.

  • react-native-picker-select:

    Lightweight and performs efficiently, making it suitable for applications that prioritize speed and responsiveness.

  • react-native-dropdown-picker:

    Performance can vary depending on the number of items and customizations, but generally performs well for most use cases.

  • react-native-select-dropdown:

    Performance is solid, but heavy customizations or large datasets may impact responsiveness; however, it is generally efficient for typical use cases.

  • @react-native-community/picker:

    Performance is generally good for basic use cases, but may lag with complex customizations or large datasets.

Community Support

  • @react-native-picker/picker:

    Well-maintained with active community support, ensuring regular updates and improvements based on user feedback.

  • react-native-picker-select:

    Strong community support with good documentation, making it easy for developers to troubleshoot and find examples.

  • react-native-dropdown-picker:

    Has a supportive community and good documentation, making it easier for developers to find help and resources.

  • react-native-select-dropdown:

    Active community support with regular updates, ensuring that developers have access to the latest features and fixes.

  • @react-native-community/picker:

    Being part of the React Native community, it has decent support and documentation, but may not be as actively maintained as others.

How to Choose: @react-native-picker/picker vs react-native-picker-select vs react-native-dropdown-picker vs react-native-select-dropdown vs @react-native-community/picker
  • @react-native-picker/picker:

    Opt for this package if you need a more modern and flexible picker that supports both iOS and Android with a consistent API. It is ideal for projects that require a customizable and responsive dropdown experience.

  • react-native-picker-select:

    Use this package if you prefer a lightweight solution that allows for custom styling and integrates easily with React Native forms. It is great for projects that need a simple yet effective picker without heavy dependencies.

  • react-native-dropdown-picker:

    Select this library if you want a highly customizable dropdown component with built-in support for multi-select and search functionality. It is perfect for applications that require advanced features and a rich user interface.

  • react-native-select-dropdown:

    Choose this package if you need a dropdown component that supports both single and multiple selections with easy customization options. It is suitable for applications that require a versatile dropdown experience.

  • @react-native-community/picker:

    Choose this package if you are looking for a simple and straightforward picker component that integrates well with the React Native ecosystem and is maintained by the community. It is suitable for basic use cases where customization is not a priority.

README for @react-native-picker/picker

@react-native-picker/picker

npm version Build Supports Android, iOS, MacOS, and Windows MIT License Lean Core Extracted

| Android | iOS | PickerIOS | | --- | --- | --- | | | |

| Windows | MacOS | | --- | --- | | |

Supported Versions

| @react-native-picker/picker | react-native | react-native-windows | | --- | --- | --- | | >= 2.0.0 | 0.61+ | 0.64+ | | >= 1.16.0 | 0.61+ | 0.61+ | | >= 1.2.0 | 0.60+ or 0.59+ with Jetifier | N/A | | >= 1.0.0 | 0.57 | N/A |

Getting started

$ npm install @react-native-picker/picker --save

or

$ yarn add @react-native-picker/picker

For React Native v0.60 and above (Autolinking)

As react-native@0.60 and above supports autolinking there is no need to run the linking process. Read more about autolinking here. This is supported by react-native-windows@0.64 and above.

iOS

CocoaPods on iOS needs this extra step:

npx pod-install

Android

No additional step is required.

Windows (expand for details)

Windows

Usage in Windows without autolinking requires the following extra steps:

Add the ReactNativePicker project to your solution.
  1. Open the solution in Visual Studio 2019
  2. Right-click Solution icon in Solution Explorer > Add > Existing Project Select D:\dev\RNTest\node_modules\@react-native-picker\picker\windows\ReactNativePicker\ReactNativePicker.vcxproj
windows/myapp.sln

Add a reference to ReactNativePicker to your main application project. From Visual Studio 2019:

Right-click main application project > Add > Reference... Check ReactNativePicker from Solution Projects.

app.cpp

Add #include "winrt/ReactNativePicker.h" to the headers included at the top of the file.

Add PackageProviders().Append(winrt::ReactNativePicker::ReactPackageProvider()); before InitializeComponent();.

MacOS

CocoaPods on MacOS needs this extra step (called from the MacOS directory)

pod install
React Native below 0.60 (Link and Manual Installation)

The following steps are only necessary if you are working with a version of React Native lower than 0.60

Mostly automatic installation

$ react-native link @react-native-picker/picker

Manual installation

iOS

  1. In XCode, in the project navigator, right click LibrariesAdd Files to [your project's name]
  2. Go to node_modules @react-native-picker/picker and add RNCPicker.xcodeproj
  3. In XCode, in the project navigator, select your project. Add libRNCPicker.a to your project's Build PhasesLink Binary With Libraries
  4. Run your project (Cmd+R)<

Android

  1. Open application file (android/app/src/main/java/[...]/MainApplication.java)
  • Add import com.reactnativecommunity.picker.RNCPickerPackage; to the imports at the top of the file
  • Add new RNCPickerPackage() to the list returned by the getPackages() method
  1. Append the following lines to android/settings.gradle:
    include ':@react-native-picker_picker'
    project(':@react-native-picker_picker').projectDir = new File(rootProject.projectDir, 	'../node_modules/@react-native-picker/picker/android')
    
  2. Insert the following lines inside the dependencies block in android/app/build.gradle:
      implementation project(path: ':@react-native-picker_picker')
    

MacOS

  1. In XCode, in the project navigator, right click LibrariesAdd Files to [your project's name]
  2. Go to node_modules @react-native-picker/picker and add RNCPicker.xcodeproj
  3. In XCode, in the project navigator, select your project. Add libRNCPicker.a to your project's Build PhasesLink Binary With Libraries
  4. Run your project (Cmd+R)<

RTL Support

you need to add android:supportsRtl="true" to AndroidManifest.xml

   <application
      ...
      android:supportsRtl="true">

Usage

Import Picker from @react-native-picker/picker:

import {Picker} from '@react-native-picker/picker';

Create state which will be used by the Picker:

const [selectedLanguage, setSelectedLanguage] = useState();

Add Picker like this:

<Picker
  selectedValue={selectedLanguage}
  onValueChange={(itemValue, itemIndex) =>
    setSelectedLanguage(itemValue)
  }>
  <Picker.Item label="Java" value="java" />
  <Picker.Item label="JavaScript" value="js" />
</Picker>

If you want to open/close picker programmatically on android (available from version 1.16.0+), pass ref to Picker:

const pickerRef = useRef();

function open() {
  pickerRef.current.focus();
}

function close() {
  pickerRef.current.blur();
}

return <Picker
  ref={pickerRef}
  selectedValue={selectedLanguage}
  onValueChange={(itemValue, itemIndex) =>
    setSelectedLanguage(itemValue)
  }>
  <Picker.Item label="Java" value="java" />
  <Picker.Item label="JavaScript" value="js" />
</Picker>

Props


Reference

Props

onValueChange

Callback for when an item is selected. This is called with the following parameters:

  • itemValue: the value prop of the item that was selected
  • itemPosition: the index of the selected item in this picker

| Type | Required | | -------- | -------- | | function | No |


selectedValue

Value matching value of one of the items. Can be a string or an integer.

| Type | Required | | ---- | -------- | | any | No |


style

| Type | Required | | --------------- | -------- | | pickerStyleType | No |


testID

Used to locate this view in end-to-end tests.

| Type | Required | | ------ | -------- | | string | No |


enabled

If set to false, the picker will be disabled, i.e. the user will not be able to make a selection.

| Type | Required | Platform | | ---- | -------- | -------- | | bool | No | Android, Web, Windows |


mode

On Android, specifies how to display the selection items when the user taps on the picker:

  • 'dialog': Show a modal dialog. This is the default.
  • 'dropdown': Shows a dropdown anchored to the picker view

| Type | Required | Platform | | -------------------------- | -------- | -------- | | enum('dialog', 'dropdown') | No | Android |


dropdownIconColor

On Android, specifies color of dropdown triangle. Input value should be value that is accepted by react-native processColor function.

| Type | Required | Platform | | ---------- | -------- | -------- | | ColorValue | No | Android |


dropdownIconRippleColor

On Android, specifies ripple color of dropdown triangle. Input value should be value that is accepted by react-native processColor function.

| Type | Required | Platform | | ---------- | -------- | -------- | | ColorValue | No | Android |


prompt

Prompt string for this picker, used on Android in dialog mode as the title of the dialog.

| Type | Required | Platform | | ------ | -------- | -------- | | string | No | Android |


itemStyle

Style to apply to each of the item labels.

| Type | Required | Platform | | ---------------------------------- | -------- | -------- | | text styles | No | iOS, Windows |

numberOfLines

On Android & iOS, used to truncate the text with an ellipsis after computing the text layout, including line wrapping, such that the total number of lines does not exceed this number. Default is '1'

| Type | Required | Platform | | ------- | -------- | -------- | | number | No | Android, iOS |

onBlur

| Type | Required | Platform | | --------- | -------- | -------- | | function | No | Android |

onFocus

| Type | Required | Platform | | --------- | -------- | -------- | | function | No | Android |

selectionColor

| Type | Required | Platform | | ------- | -------- | -------- | | ColorValue | No | iOS |

Methods

blur (Android only, lib version 1.16.0+)

Programmatically closes picker

focus (Android only, lib version 1.16.0+)

Programmatically opens picker

PickerItemProps

Props that can be applied to individual Picker.Item

label

Displayed value on the Picker Item

| Type | Required | | ------- | -------- | | string | Yes |

value

Actual value on the Picker Item

| Type | Required | | ------- | -------- | | number,string | Yes |

color

Displayed color on the Picker Item

| Type | Required | | ----------- | -------- | | ColorValue | No |

fontFamily

Displayed fontFamily on the Picker Item

| Type | Required | | ------- | -------- | | string | No |

style

Style to apply to individual item labels.

| Type | Required | Platform | | ------- | -------- | -------- | | ViewStyleProp | No | Android |

enabled

If set to false, the specific item will be disabled, i.e. the user will not be able to make a selection

@default: true

| Type | Required | Platform | | ------- | -------- | -------- | | boolean | No | Android |

contentDescription

Sets the content description to the Picker Item

| Type | Required | Platform | | ------ | -------- | -------- | | string | No | Android |

PickerIOS

Props


Reference

Props

itemStyle

| Type | Required | | ---------------------------------- | -------- | | text styles | No |


onValueChange

| Type | Required | | -------- | -------- | | function | No |


selectedValue

| Type | Required | | ---- | -------- | | any | No |


selectionColor

| Type | Required | Platform | | ------- | -------- | -------- | | ColorValue | No | iOS |


themeVariant

| Type | Required | | ---- | -------- | | enum('light', 'dark') | No |