react-native-element-dropdown React Native Element Dropdown is a library that provides a customizable dropdown component for React Native applications. This library simplifies the process of creating dropdown menus and provides a variety of options to customize the dropdown to match the design and functionality of your application.
Dropdown and Multiselect in one package Easy to use Consistent look and feel on iOS and Android Customizable font size, colors and animation duration Implemented with typescript If you love this library , give us a star , you will be a ray of sunshine in our lives :) Free React Native Boilerplate React Native Template with a beautiful UI.
npm install react - native - element - dropdown -- save or
yarn add react - native - element - dropdown
Props Params isRequire Description mode 'default' or 'modal' of 'auto' No Mode 'modal' is show the dropdown in the middle of the screen. data Array Yes Data is a plain array labelField String Yes Extract the label from the data item valueField String Yes Extract the primary key from the data item searchField String No Specify the field of data list you want to search onChange (item: object) => void Yes Selection callback onChangeText (search: string) => void No Callback that is called when the text input's text changes value Item No Set default value placeholder String No The string that will be rendered before dropdown has been selected placeholderStyle TextStyle No Styling for text placeholder selectedTextStyle TextStyle No Styling for selected text selectedTextProps TextProps No Text Props for selected text. Ex: numberOfLines={1} style ViewStyle No Styling for view container containerStyle ViewStyle No Styling for list container maxHeight Number No Customize max height for list container minHeight Number No Customize min height for list container fontFamily String No Customize font style iconStyle ImageStyle No Styling for icon iconColor String No Color of icons itemContainerStyle TextStyle No Styling for item container in list itemTextStyle TextStyle No Styling for text item in list activeColor String No Background color for item selected in list container search Boolean No Show or hide input search searchQuery (keyword: string, labelValue: string) => Boolean No Callback used to filter the list of items inputSearchStyle ViewStyle No Styling for input search searchPlaceholder String No The string that will be rendered before text input has been entered searchPlaceholderTextColor String No The text color of the placeholder string renderInputSearch (onSearch: (text:string) => void) => JSX.Element No Customize TextInput search disable Boolean No Specifies the disabled state of the Dropdown dropdownPosition 'auto' or 'top' or 'bottom' No Dropdown list position. Default is 'auto' autoScroll Boolean No Auto scroll to index item selected, default is true showsVerticalScrollIndicator Boolean No When true, shows a vertical scroll indicator, default is true renderLeftIcon (visible?: boolean) => JSX.Element No Customize left icon for dropdown renderRightIcon (visible?: boolean) => JSX.Element No Customize right icon for dropdown renderItem (item: object, selected: Boolean) => JSX.Element No Takes an item from data and renders it into the list flatListProps FlatListProps No Customize FlatList element inverted Boolean No Reverses the direction of scroll on top position mode. Default is true onFocus () => void No Callback that is called when the dropdown is focused onBlur () => void No Callback that is called when the dropdown is blurred keyboardAvoiding Boolean No keyboardAvoiding default is true backgroundColor String No Set background color confirmSelectItem Boolean No Turn On confirm select item. Refer example/src/dropdown/example3 onConfirmSelectItem (item: object) => void No Selection callback. Refer example/src/dropdown/example3 testID String No Used to locate this view in end-to-end tests itemTestIDField String No Add this field to the input data. Ex: DATA = [{itemTestIDField: '', label: '', value:: ''}] accessibilityLabel String No Set an accessibilityLabel on the view, so that people who use VoiceOver know what element they have selected itemAccessibilityLabelField String No Add this field to the input data. Ex: DATA = [{itemAccessibilityLabelField: '', label: '', value:: ''}] closeModalWhenSelectedItem Boolean No By default, closeModalWhenSelectedItem is set to true. When closeModalWhenSelectedItem is set to false, the Modal won't close when an item is selected. excludeItems Item[] No The array containing the items to be excluded. excludeSearchItems Item[] No The array containing the items to be excluded.
Props Params isRequire Description mode 'default' or 'modal' of 'auto' No Mode 'modal' is show the dropdown in the middle of the screen. data Array Yes Data is a plain array labelField String Yes Extract the label from the data item valueField String Yes Extract the primary key from the data item searchField String No Specify the field of data list you want to search onChange (value[]) => void Yes Selection callback. A array containing the "valueField". onChangeText (search: string) => void No Callback that is called when the text input's text changes value Item[] No Set default value. A array containing the "valueField". placeholder String No The string that will be rendered before dropdown has been selected placeholderStyle TextStyle No Styling for text placeholder style ViewStyle No Styling for view container containerStyle ViewStyle No Styling for list container maxHeight Number No Customize max height for list container minHeight Number No Customize min height for list container maxSelect Number No maximum number of items that can be selected fontFamily String No Customize font style iconStyle ImageStyle No Styling for icon iconColor String No Color of icons activeColor String No Background color for item selected in list container itemContainerStyle TextStyle No Styling for item container in list itemTextStyle TextStyle No Styling for text item in list selectedStyle ViewStyle No Styling for selected view selectedTextStyle TextStyle No Styling for selected text selectedTextProps TextProps No Text Props for selected text. Ex: numberOfLines={1} renderSelectedItem (item: object, unSelect?: () => void) => JSX.Element No Takes an item from data and renders it into the list selected alwaysRenderSelectedItem Boolean No Always show the list of selected items visibleSelectedItem Boolean No Option to hide selected item list, Ẽx: visibleSelectedItem={false} search Boolean No Show or hide input search searchQuery (keyword: string, labelValue: string) => Boolean No Callback used to filter the list of items inputSearchStyle ViewStyle No Styling for input search searchPlaceholder String No The string that will be rendered before text input has been entered searchPlaceholderTextColor String No The text color of the placeholder string renderInputSearch (onSearch: (text:string) => void) => JSX.Element No Customize TextInput search disable Boolean No Specifies the disabled state of the Dropdown dropdownPosition 'auto' or 'top' or 'bottom' No Dropdown list position. Default is 'auto' showsVerticalScrollIndicator Boolean No When true, shows a vertical scroll indicator, default is true renderLeftIcon (visible?: boolean) => JSX.Element No Customize left icon for dropdown renderRightIcon (visible?: boolean) => JSX.Element No Customize right icon for dropdown renderItem (item: object, selected: Boolean) => JSX.Element No Takes an item from data and renders it into the list flatListProps FlatListProps No Customize FlatList element inverted Boolean No Reverses the direction of scroll on top position mode. Default is true onFocus () => void No Callback that is called when the dropdown is focused onBlur () => void No Callback that is called when the dropdown is blurred keyboardAvoiding Boolean No keyboardAvoiding default is true inside Boolean No inside default is false backgroundColor String No Set background color confirmSelectItem Boolean No Turn On confirm select item. Refer example/src/dropdown/example7 confirmUnSelectItem Boolean No Turn On confirm un-select item. Refer example/src/dropdown/example7 onConfirmSelectItem (item: any) => void No Selection callback. Refer example/src/dropdown/example7 testID String No Used to locate this view in end-to-end tests itemTestIDField String No Add this field to the input data. Ex: DATA = [{itemTestIDField: '', label: '', value:: ''}] accessibilityLabel String No Set an accessibilityLabel on the view, so that people who use VoiceOver know what element they have selected itemAccessibilityLabelField String No Add this field to the input data. Ex: DATA = [{itemAccessibilityLabelField: '', label: '', value:: ''}] excludeItems Item[] No The array containing the items to be excluded. excludeSearchItems Item[] No The array containing the items to be excluded.
SelectCountry extends Dropdown Props Params isRequire Description imageField String Yes Extract the image from the data item imageStyle ImageStyle No Styling for image
API Params Description open () => void Open dropdown list close () => void Close dropdown list
import React , { useState } from 'react' ; import { StyleSheet , Text , View } from 'react-native' ; import { Dropdown } from 'react-native-element-dropdown' ; import AntDesign from '@expo/vector-icons/AntDesign' ; const data = [ { label : 'Item 1' , value : '1' } , { label : 'Item 2' , value : '2' } , { label : 'Item 3' , value : '3' } , { label : 'Item 4' , value : '4' } , { label : 'Item 5' , value : '5' } , { label : 'Item 6' , value : '6' } , { label : 'Item 7' , value : '7' } , { label : 'Item 8' , value : '8' } , ] ; const DropdownComponent = ( ) => { const [ value , setValue ] = useState ( null ) ; const [ isFocus , setIsFocus ] = useState ( false ) ; const renderLabel = ( ) => { if ( value || isFocus ) { return ( < Text style = { [ styles . label , isFocus && { color : 'blue' } ] } > Dropdown label </ Text > ) ; } return null ; } ; return ( < View style = { styles . container } > { renderLabel ( ) } < Dropdown style = { [ styles . dropdown , isFocus && { borderColor : 'blue' } ] } placeholderStyle = { styles . placeholderStyle } selectedTextStyle = { styles . selectedTextStyle } inputSearchStyle = { styles . inputSearchStyle } iconStyle = { styles . iconStyle } data = { data } search maxHeight = { 300 } labelField = "label" valueField = "value" placeholder = { ! isFocus ? 'Select item' : '...' } searchPlaceholder = "Search..." value = { value } onFocus = { ( ) => setIsFocus ( true ) } onBlur = { ( ) => setIsFocus ( false ) } onChange = { item => { setValue ( item . value ) ; setIsFocus ( false ) ; } } renderLeftIcon = { ( ) => ( < AntDesign style = { styles . icon } color = { isFocus ? 'blue' : 'black' } name = "Safety" size = { 20 } /> ) } /> </ View > ) ; } ; export default DropdownComponent ; const styles = StyleSheet . create ( { container : { backgroundColor : 'white' , padding : 16 , } , dropdown : { height : 50 , borderColor : 'gray' , borderWidth : 0.5 , borderRadius : 8 , paddingHorizontal : 8 , } , icon : { marginRight : 5 , } , label : { position : 'absolute' , backgroundColor : 'white' , left : 22 , top : 8 , zIndex : 999 , paddingHorizontal : 8 , fontSize : 14 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 16 , } , iconStyle : { width : 20 , height : 20 , } , inputSearchStyle : { height : 40 , fontSize : 16 , } , } ) ;
import React , { useState } from 'react' ; import { StyleSheet } from 'react-native' ; import { Dropdown } from 'react-native-element-dropdown' ; import AntDesign from '@expo/vector-icons/AntDesign' ; const data = [ { label : 'Item 1' , value : '1' } , { label : 'Item 2' , value : '2' } , { label : 'Item 3' , value : '3' } , { label : 'Item 4' , value : '4' } , { label : 'Item 5' , value : '5' } , { label : 'Item 6' , value : '6' } , { label : 'Item 7' , value : '7' } , { label : 'Item 8' , value : '8' } , ] ; const DropdownComponent = ( ) => { const [ value , setValue ] = useState ( null ) ; return ( < Dropdown style = { styles . dropdown } placeholderStyle = { styles . placeholderStyle } selectedTextStyle = { styles . selectedTextStyle } inputSearchStyle = { styles . inputSearchStyle } iconStyle = { styles . iconStyle } data = { data } search maxHeight = { 300 } labelField = "label" valueField = "value" placeholder = "Select item" searchPlaceholder = "Search..." value = { value } onChange = { item => { setValue ( item . value ) ; } } renderLeftIcon = { ( ) => ( < AntDesign style = { styles . icon } color = "black" name = "Safety" size = { 20 } /> ) } /> ) ; } ; export default DropdownComponent ; const styles = StyleSheet . create ( { dropdown : { margin : 16 , height : 50 , borderBottomColor : 'gray' , borderBottomWidth : 0.5 , } , icon : { marginRight : 5 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 16 , } , iconStyle : { width : 20 , height : 20 , } , inputSearchStyle : { height : 40 , fontSize : 16 , } , } ) ;
import React , { useState } from 'react' ; import { StyleSheet , View , Text } from 'react-native' ; import { Dropdown } from 'react-native-element-dropdown' ; import AntDesign from '@expo/vector-icons/AntDesign' ; const data = [ { label : 'Item 1' , value : '1' } , { label : 'Item 2' , value : '2' } , { label : 'Item 3' , value : '3' } , { label : 'Item 4' , value : '4' } , { label : 'Item 5' , value : '5' } , { label : 'Item 6' , value : '6' } , { label : 'Item 7' , value : '7' } , { label : 'Item 8' , value : '8' } , ] ; const DropdownComponent = ( ) => { const [ value , setValue ] = useState ( null ) ; const renderItem = item => { return ( < View style = { styles . item } > < Text style = { styles . textItem } > { item . label } </ Text > { item . value === value && ( < AntDesign style = { styles . icon } color = "black" name = "Safety" size = { 20 } /> ) } </ View > ) ; } ; return ( < Dropdown style = { styles . dropdown } placeholderStyle = { styles . placeholderStyle } selectedTextStyle = { styles . selectedTextStyle } inputSearchStyle = { styles . inputSearchStyle } iconStyle = { styles . iconStyle } data = { data } search maxHeight = { 300 } labelField = "label" valueField = "value" placeholder = "Select item" searchPlaceholder = "Search..." value = { value } onChange = { item => { setValue ( item . value ) ; } } renderLeftIcon = { ( ) => ( < AntDesign style = { styles . icon } color = "black" name = "Safety" size = { 20 } /> ) } renderItem = { renderItem } /> ) ; } ; export default DropdownComponent ; const styles = StyleSheet . create ( { dropdown : { margin : 16 , height : 50 , backgroundColor : 'white' , borderRadius : 12 , padding : 12 , shadowColor : '#000' , shadowOffset : { width : 0 , height : 1 , } , shadowOpacity : 0.2 , shadowRadius : 1.41 , elevation : 2 , } , icon : { marginRight : 5 , } , item : { padding : 17 , flexDirection : 'row' , justifyContent : 'space-between' , alignItems : 'center' , } , textItem : { flex : 1 , fontSize : 16 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 16 , } , iconStyle : { width : 20 , height : 20 , } , inputSearchStyle : { height : 40 , fontSize : 16 , } , } ) ;
import React , { useState } from 'react' ; import { StyleSheet , View } from 'react-native' ; import { MultiSelect } from 'react-native-element-dropdown' ; import AntDesign from '@expo/vector-icons/AntDesign' ; const data = [ { label : 'Item 1' , value : '1' } , { label : 'Item 2' , value : '2' } , { label : 'Item 3' , value : '3' } , { label : 'Item 4' , value : '4' } , { label : 'Item 5' , value : '5' } , { label : 'Item 6' , value : '6' } , { label : 'Item 7' , value : '7' } , { label : 'Item 8' , value : '8' } , ] ; const MultiSelectComponent = ( ) => { const [ selected , setSelected ] = useState ( [ ] ) ; return ( < View style = { styles . container } > < MultiSelect style = { styles . dropdown } placeholderStyle = { styles . placeholderStyle } selectedTextStyle = { styles . selectedTextStyle } inputSearchStyle = { styles . inputSearchStyle } iconStyle = { styles . iconStyle } search data = { data } labelField = "label" valueField = "value" placeholder = "Select item" searchPlaceholder = "Search..." value = { selected } onChange = { item => { setSelected ( item ) ; } } renderLeftIcon = { ( ) => ( < AntDesign style = { styles . icon } color = "black" name = "Safety" size = { 20 } /> ) } selectedStyle = { styles . selectedStyle } /> </ View > ) ; } ; export default MultiSelectComponent ; const styles = StyleSheet . create ( { container : { padding : 16 } , dropdown : { height : 50 , backgroundColor : 'transparent' , borderBottomColor : 'gray' , borderBottomWidth : 0.5 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 14 , } , iconStyle : { width : 20 , height : 20 , } , inputSearchStyle : { height : 40 , fontSize : 16 , } , icon : { marginRight : 5 , } , selectedStyle : { borderRadius : 12 , } , } ) ;
import React , { useState } from 'react' ; import { StyleSheet , View , TouchableOpacity , Text } from 'react-native' ; import { MultiSelect } from 'react-native-element-dropdown' ; import AntDesign from '@expo/vector-icons/AntDesign' ; const data = [ { label : 'Item 1' , value : '1' } , { label : 'Item 2' , value : '2' } , { label : 'Item 3' , value : '3' } , { label : 'Item 4' , value : '4' } , { label : 'Item 5' , value : '5' } , { label : 'Item 6' , value : '6' } , { label : 'Item 7' , value : '7' } , { label : 'Item 8' , value : '8' } , ] ; const MultiSelectComponent = ( ) => { const [ selected , setSelected ] = useState ( [ ] ) ; const renderItem = item => { return ( < View style = { styles . item } > < Text style = { styles . selectedTextStyle } > { item . label } </ Text > < AntDesign style = { styles . icon } color = "black" name = "Safety" size = { 20 } /> </ View > ) ; } ; return ( < View style = { styles . container } > < MultiSelect style = { styles . dropdown } placeholderStyle = { styles . placeholderStyle } selectedTextStyle = { styles . selectedTextStyle } inputSearchStyle = { styles . inputSearchStyle } iconStyle = { styles . iconStyle } data = { data } labelField = "label" valueField = "value" placeholder = "Select item" value = { selected } search searchPlaceholder = "Search..." onChange = { item => { setSelected ( item ) ; } } renderLeftIcon = { ( ) => ( < AntDesign style = { styles . icon } color = "black" name = "Safety" size = { 20 } /> ) } renderItem = { renderItem } renderSelectedItem = { ( item , unSelect ) => ( < TouchableOpacity onPress = { ( ) => unSelect && unSelect ( item ) } > < View style = { styles . selectedStyle } > < Text style = { styles . textSelectedStyle } > { item . label } </ Text > < AntDesign color = "black" name = "delete" size = { 17 } /> </ View > </ TouchableOpacity > ) } /> </ View > ) ; } ; export default MultiSelectComponent ; const styles = StyleSheet . create ( { container : { padding : 16 } , dropdown : { height : 50 , backgroundColor : 'white' , borderRadius : 12 , padding : 12 , shadowColor : '#000' , shadowOffset : { width : 0 , height : 1 , } , shadowOpacity : 0.2 , shadowRadius : 1.41 , elevation : 2 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 14 , } , iconStyle : { width : 20 , height : 20 , } , inputSearchStyle : { height : 40 , fontSize : 16 , } , icon : { marginRight : 5 , } , item : { padding : 17 , flexDirection : 'row' , justifyContent : 'space-between' , alignItems : 'center' , } , selectedStyle : { flexDirection : 'row' , justifyContent : 'center' , alignItems : 'center' , borderRadius : 14 , backgroundColor : 'white' , shadowColor : '#000' , marginTop : 8 , marginRight : 12 , paddingHorizontal : 12 , paddingVertical : 8 , shadowOffset : { width : 0 , height : 1 , } , shadowOpacity : 0.2 , shadowRadius : 1.41 , elevation : 2 , } , textSelectedStyle : { marginRight : 5 , fontSize : 16 , } , } ) ;
import React , { useState } from 'react' ; import { StyleSheet } from 'react-native' ; import { SelectCountry } from 'react-native-element-dropdown' ; const local_data = [ { value : '1' , lable : 'Country 1' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '2' , lable : 'Country 2' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '3' , lable : 'Country 3' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '4' , lable : 'Country 4' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '5' , lable : 'Country 5' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , ] ; const SelectCountryScreen = _props => { const [ country , setCountry ] = useState ( '1' ) ; return ( < SelectCountry style = { styles . dropdown } selectedTextStyle = { styles . selectedTextStyle } placeholderStyle = { styles . placeholderStyle } imageStyle = { styles . imageStyle } inputSearchStyle = { styles . inputSearchStyle } iconStyle = { styles . iconStyle } search maxHeight = { 200 } value = { country } data = { local_data } valueField = "value" labelField = "lable" imageField = "image" placeholder = "Select country" searchPlaceholder = "Search..." onChange = { e => { setCountry ( e . value ) ; } } /> ) ; } ; export default SelectCountryScreen ; const styles = StyleSheet . create ( { dropdown : { margin : 16 , height : 50 , borderBottomColor : 'gray' , borderBottomWidth : 0.5 , } , imageStyle : { width : 24 , height : 24 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 16 , marginLeft : 8 , } , iconStyle : { width : 20 , height : 20 , } , inputSearchStyle : { height : 40 , fontSize : 16 , } , } ) ;
import React , { useState } from 'react' ; import { StyleSheet } from 'react-native' ; import { SelectCountry } from 'react-native-element-dropdown' ; const local_data = [ { value : '1' , lable : 'Country 1' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '2' , lable : 'Country 2' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '3' , lable : 'Country 3' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '4' , lable : 'Country 4' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , { value : '5' , lable : 'Country 5' , image : { uri : 'https://www.vigcenter.com/public/all/images/default-image.jpg' , } , } , ] ; const SelectCountryScreen = _props => { const [ country , setCountry ] = useState ( '1' ) ; return ( < SelectCountry style = { styles . dropdown } selectedTextStyle = { styles . selectedTextStyle } placeholderStyle = { styles . placeholderStyle } imageStyle = { styles . imageStyle } iconStyle = { styles . iconStyle } maxHeight = { 200 } value = { country } data = { local_data } valueField = "value" labelField = "lable" imageField = "image" placeholder = "Select country" searchPlaceholder = "Search..." onChange = { e => { setCountry ( e . value ) ; } } /> ) ; } ; export default SelectCountryScreen ; const styles = StyleSheet . create ( { dropdown : { margin : 16 , height : 50 , width : 150 , backgroundColor : '#EEEEEE' , borderRadius : 22 , paddingHorizontal : 8 , } , imageStyle : { width : 24 , height : 24 , borderRadius : 12 , } , placeholderStyle : { fontSize : 16 , } , selectedTextStyle : { fontSize : 16 , marginLeft : 8 , } , iconStyle : { width : 20 , height : 20 , } , } ) ;