<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eliyahu Kriel</title>
    <description>The latest articles on DEV Community by Eliyahu Kriel (@elik56a).</description>
    <link>https://dev.to/elik56a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2422131%2F66e0ed59-9634-4a34-8942-8a841aa9bee7.jpg</url>
      <title>DEV Community: Eliyahu Kriel</title>
      <link>https://dev.to/elik56a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/elik56a"/>
    <language>en</language>
    <item>
      <title>I replaced six React Native picker libraries with one, and it has zero native code</title>
      <dc:creator>Eliyahu Kriel</dc:creator>
      <pubDate>Thu, 29 Oct 2026 13:55:00 +0000</pubDate>
      <link>https://dev.to/elik56a/i-replaced-six-react-native-picker-libraries-with-one-and-it-has-zero-native-code-4i0c</link>
      <guid>https://dev.to/elik56a/i-replaced-six-react-native-picker-libraries-with-one-and-it-has-zero-native-code-4i0c</guid>
      <description>&lt;p&gt;Every React Native app I've worked on ended up with the same pile of packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@react-native-community/datetimepicker&lt;/code&gt; for dates and times&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;react-native-calendars&lt;/code&gt; because the date picker can't do ranges&lt;/li&gt;
&lt;li&gt;a dropdown library, because the native picker can't search&lt;/li&gt;
&lt;li&gt;a country picker, then a phone input on top of it&lt;/li&gt;
&lt;li&gt;an emoji keyboard for the chat screen&lt;/li&gt;
&lt;li&gt;a bottom sheet to put half of these in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Six APIs, six looks, some of them native modules that need a rebuild, and most of them broken or missing on the web.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://github.com/elik56a/react-native-pickers" rel="noopener noreferrer"&gt;React Native Pickers&lt;/a&gt;&lt;/strong&gt;: one package with all of them, written in plain JavaScript on React Native's own APIs. No native code, no dependencies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rs0m1336znz54e797gj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rs0m1336znz54e797gj.gif" alt="React Native Pickers screens in light and dark: a date range with prices on iOS, the Android clock dial, the iOS emoji picker, Android color swatches and an iOS phone number field" width="600" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wheels:&lt;/strong&gt; the 3D iOS wheel, with looping, disabled rows and tap-to-type&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dates:&lt;/strong&gt; a calendar (single day, range, multiple days, several ranges) or day / month / year wheels; a month picker; a week strip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time:&lt;/strong&gt; wheels, the Material clock dial, or columns to click; durations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date and time together&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select:&lt;/strong&gt; search, multi-select with chips, groups, icons and server search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Country:&lt;/strong&gt; about 250 countries with flag emoji, dialing codes and names in the user's language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phone number:&lt;/strong&gt; a country code button, formatting as you type, an E.164 value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emoji:&lt;/strong&gt; 1,923 emojis with search, skin tones and recently used&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color:&lt;/strong&gt; iOS's grid / spectrum / sliders, Google's swatch circles, or the browser's spectrum&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segmented control and chips&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bottom sheets and form fields&lt;/strong&gt; to put any of them in&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What using it looks like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DatePickerField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SelectPicker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TimePickerField&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@elik56a/react-native-pickers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DateRange&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@elik56a/react-native-pickers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ROOMS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Single&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;single&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Double&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;double&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Suite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;suite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Booking&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;stay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setStay&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;DateRange&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arrival&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setArrival&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setRoom&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DatePickerField&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Stay"&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"range"&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;stay&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onConfirm&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;setStay&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;minDate&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TimePickerField&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Arrival"&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;arrival&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onConfirm&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;setArrival&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;minuteInterval&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SelectPicker&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Room"&lt;/span&gt; &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ROOMS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;setRoom&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each field opens its picker in a bottom sheet on a phone and a dropdown in the browser, and shows the chosen value formatted for the user's locale. Every component is controlled the same way: &lt;code&gt;value&lt;/code&gt; and &lt;code&gt;onChange&lt;/code&gt; (or &lt;code&gt;onConfirm&lt;/code&gt; for the sheets), and &lt;code&gt;onChange&lt;/code&gt; only fires when the user changes something.&lt;/p&gt;

&lt;h2&gt;
  
  
  It looks native on each platform
&lt;/h2&gt;

&lt;p&gt;This is the part I cared about most. By default each picker takes the design of the platform it runs on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;iOS:&lt;/strong&gt; wheels, a tinted selected day, Cancel and Done in the sheet header&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android:&lt;/strong&gt; Material Design, with the clock dial, outlined fields with floating labels, and OK at the bottom&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web:&lt;/strong&gt; a compact calendar, time columns to click, dropdowns, and a focus ring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your app has its own look and you want the same pickers everywhere, it's one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PickersProvider&lt;/span&gt; &lt;span class="na"&gt;design&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"ios"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;PickersProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dark mode follows the system, and every color, radius and font comes from theme tokens you can override. Every visual part also has a style slot, and render props let you replace a day cell, an option row or the whole field.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why zero native code matters
&lt;/h2&gt;

&lt;p&gt;Everything is built on React Native's core APIs: &lt;code&gt;Animated&lt;/code&gt; with the native driver, &lt;code&gt;PanResponder&lt;/code&gt;, &lt;code&gt;FlatList&lt;/code&gt; and &lt;code&gt;Modal&lt;/code&gt;. No Reanimated, no Gesture Handler, no SVG. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it works in &lt;strong&gt;Expo Go&lt;/strong&gt;, with no development build and no config plugin&lt;/li&gt;
&lt;li&gt;it ships in &lt;strong&gt;over-the-air updates&lt;/strong&gt;, because there's nothing native to rebuild&lt;/li&gt;
&lt;li&gt;it works on &lt;strong&gt;React Native Web&lt;/strong&gt;, which is where most picker libraries fall short&lt;/li&gt;
&lt;li&gt;it doesn't break when your React Native version changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Things I didn't want to install separately
&lt;/h2&gt;

&lt;p&gt;A few details that usually mean another package:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prices and dots on calendar days.&lt;/strong&gt; &lt;code&gt;markedDates&lt;/code&gt; takes a label and up to three colored dots per day, so a booking calendar can show &lt;code&gt;$129&lt;/code&gt; under each night.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server search.&lt;/strong&gt; Give &lt;code&gt;SelectPicker&lt;/code&gt; a &lt;code&gt;loadOptions(query)&lt;/code&gt; that returns a promise; it debounces, shows a loader and ignores stale answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phone numbers without libphonenumber.&lt;/strong&gt; &lt;code&gt;PhoneField&lt;/code&gt; groups digits the way about 50 countries write them, drops the leading 0 people type at home, and reads the country from a pasted &lt;code&gt;+44…&lt;/code&gt; number. The value is always E.164, like &lt;code&gt;+447911123456&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility.&lt;/strong&gt; Wheels are adjustable for VoiceOver and TalkBack, days announce their full date, and on the web you can use every picker from the keyboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Coming from another library?
&lt;/h2&gt;

&lt;p&gt;There's a prop-by-prop &lt;a href="https://elik56a.github.io/react-native-pickers/docs/next/resources/migration" rel="noopener noreferrer"&gt;migration guide&lt;/a&gt; for 12 libraries: &lt;code&gt;@react-native-community/datetimepicker&lt;/code&gt;, &lt;code&gt;react-native-date-picker&lt;/code&gt;, &lt;code&gt;react-native-modal-datetime-picker&lt;/code&gt;, &lt;code&gt;react-native-calendars&lt;/code&gt;, &lt;code&gt;@react-native-picker/picker&lt;/code&gt;, &lt;code&gt;react-native-picker-select&lt;/code&gt;, &lt;code&gt;react-native-dropdown-picker&lt;/code&gt;, &lt;code&gt;react-native-element-dropdown&lt;/code&gt;, &lt;code&gt;react-native-country-picker-modal&lt;/code&gt;, &lt;code&gt;react-native-phone-number-input&lt;/code&gt;, &lt;code&gt;rn-emoji-keyboard&lt;/code&gt; and &lt;code&gt;@react-native-segmented-control/segmented-control&lt;/code&gt;. Most of them come down to renaming a few props.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo &lt;span class="nb"&gt;install&lt;/span&gt; @elik56a/react-native-pickers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docs with live, editable examples:&lt;/strong&gt; 
&lt;a href="https://react-native-pickers.dev/" rel="noopener noreferrer"&gt;https://react-native-pickers.dev/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Showcase of real screens&lt;/strong&gt; (booking, flights, alarm, chat, checkout), switchable between iOS, Android and web: 
&lt;a href="https://react-native-pickers.dev/showcase" rel="noopener noreferrer"&gt;https://react-native-pickers.dev/showcase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/elik56a/react-native-pickers" rel="noopener noreferrer"&gt;https://github.com/elik56a/react-native-pickers&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's MIT licensed and I'm working on it actively. I'd really like to hear what's missing, what breaks in your app, and what you'd need before using it in production. Comments here or issues on GitHub both work, and a star helps other people find it.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
