Implement Dropdown Select Boxes in React Native with Formik

How to make dropdown select boxes in React Native with Formik

image by material.ioimage by material.io

Dropdown select-boxes are a common feature on a lot of forms in mobile and web applications. They allow a user to select a single item from a list of similar items. These items can be days, months, cities, countries, or any other categories. This article will show you how to put in place drop-down select boxes in React Native and Formik.

Step 1: Create a new react-native project using expo. Call it SelectBoxApp

expo init SelectBoxApp

Step 2: Then install the Formik library to the app. Read the Formik Documentation here.

npm install formik --save

Step 3: Install Axios

npm install axios --save

Step 4: Install react-native-paper

npm install react-native-paper

Step 5: Install react-native-community/picker

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

View documentation od @react-native-community/picker here.

Step 6: Import react into your app.js file

import React from 'react';

Step 7: Import axios into your app.js file.

import axios from 'axios';

Step 8: Import View, Text, and Alert components from react-native into your app.js

import { View, Text, Alert} from 'react-native';

Step 9: Import Button, Title, and TextInput components from react-native-paper into your app.js file

import { Button, Title, TextInput } from 'react-native-paper';

Step 10: Import the useFormik hook from formik into your app.js file

import { useFormik } from 'formik';

Step 11: Import the Picker from @react-native-community/picker into your app.js file.

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

This is the full list of imports required.

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { View, Text, Alert} from 'react-native';
import { Button } from 'react-native-paper';
import { useFormik } from 'formik';
import { Picker } from '@react-native-community/picker'

Step 12: Create a constant variable called App to hold a fat arrow function.

const App = () => {

};

export default App;

Step 13: Inside App create an array that will hold the options for our dropdown select box. Call it cities.

const cities = [
     {name:"Los Angeles", id: 1},
     {name:"Philadelphia", id: 2},
     {name:"Chicago", id: 3},
     {name:"Washington DC", id: 4},
     {name:"New York", id: 5},
     {name:"San Diego", id: 6},
     {name:"Fort Worth", id: 7},
     {name:"Houston", id: 8},
     {name:"Cleveland", id: 9},
     {name:"Pittsburg", id: 10},
     {name:"Detroit", id: 11},
     {name:"Jacksonville", id: 12},
     {name:"Denver", id: 13},
     {name:"Columbus", id: 14},
     {name:"El Paso", id: 15},
     {name:"New Orleans", id: 16},
     {name:"Cincinnati", id: 17},
     {name:"Nashville", id: 18},
     {name:"Miami", id: 19},
     {name:"Tampa", id: 20},
     {name:"Bakersfield", id: 22},
     {name:"Tuscon", id: 23},
     {name:"Baltimore", id: 25},
     {name:"St Louis", id: 26},
     {name:"Las Vegas", id: 27},
     {name:"Memphis", id: 28},
     {name:"Seatle", id: 29},
     {name:"San Fransisco", id: 30},

]

Step 14: Inside the App. Create a constant variable to hold the return value of the useFormik hook.

const formik = useFormik();

Step 15: Add city_name property to the initialValues property.

const formik = useFormik({
  initialValues: { city_name: '' },
});

Step 16: To the onSubmit property, make an HTTP request using axios to post the data to an API endpoint.

const formik = useFormik({
   initialValues: { city_name: '' },
   onSubmit: values => {
     axios({
        method: 'post',
        url: <domain-name> + 'url',
        data: {
           'city_name': values.city_name},
        headers: {'Content-Type': 'application/json'}
         }).then(response => {
         }).catch(err => {
             Alert.alert('An error occurred!', err.message,
           [{ text: 'Okay' }]);

})}

});

In the return statement, add a Picker element and the Picker Item.

return(

<View>
      <Picker
            enabled={true}
            mode="dropdown"
            placeholder="Select City"
            onValueChange={formik.handleChange('city_name')}
            selectedValue={formik.values.city_name}
      >
       {cities.map((item) => {
        return
          (<Picker.Item
              label={item.name.toString()}
              value={item.name.toString()}
              key={item.id.toString()} />)
        })}

</Picker>

</View>

)

Step 17: Next, add the submit button below the picker.

return(

<View>
      <Picker
            enabled={true}
            mode="dropdown"
            placeholder="Select City"
            onValueChange={formik.handleChange('city_name')}
            selectedValue={formik.values.city_name}
      >
       {cities.map((item) => {
        return
          (<Picker.Item
              label={item.name.toString()}
              value={item.name.toString()}
              key={item.id.toString()} />)
        })}

     </Picker>

     <Button
            mode="contained"
            title='submit'
            onPress={formik.handleSubmit}
      >
        Enter
      </Button>

</View>

)

The final app.js file should look like this.

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { View, Text, Alert} from 'react-native';
import { Button } from 'react-native-paper';
import { useFormik } from 'formik';
import { Picker } from '@react-native-community/picker'


const App = () => {

const cities = [
     {name:"Los Angeles", id: 1},
     {name:"Philadelphia", id: 2},
     {name:"Chicago", id: 3},
     {name:"Washington DC", id: 4},
     {name:"New York", id: 5},
     {name:"San Diego", id: 6},
     {name:"Fort Worth", id: 7},
     {name:"Houston", id: 8},
     {name:"Cleveland", id: 9},
     {name:"Pittsburg", id: 10},
     {name:"Detroit", id: 11},
     {name:"Jacksonville", id: 12},
     {name:"Denver", id: 13},
     {name:"Columbus", id: 14},
     {name:"El Paso", id: 15},
     {name:"New Orleans", id: 16},
     {name:"Cincinnati", id: 17},
     {name:"Nashville", id: 18},
     {name:"Miami", id: 19},
     {name:"Tampa", id: 20},
     {name:"Bakersfield", id: 22},
     {name:"Tuscon", id: 23},
     {name:"Baltimore", id: 25},
     {name:"St Louis", id: 26},
     {name:"Las Vegas", id: 27},
     {name:"Memphis", id: 28},
     {name:"Seatle", id: 29},
     {name:"San Fransisco", id: 30},
]

const formik = useFormik({
   initialValues: { city_name: '' },
   onSubmit: values => {
     axios({
        method: 'post',
        url: <domain-name> + 'url',
        data: {
           'city_name': values.city_name},
        headers: {'Content-Type': 'application/json'}
         }).then(response => {
         }).catch(err => {
             Alert.alert('An error occurred!', err.message,
           [{ text: 'Okay' }]);

})}

});

return(

<View>


      <Picker
            enabled={true}
            mode="dropdown"
            placeholder="Select City"
            onValueChange={formik.handleChange('city_name')}
            selectedValue={formik.values.city_name}
      >
       {cities.map((item) => {
        return
          (<Picker.Item
              label={item.name.toString()}
              value={item.name.toString()}
              key={item.id.toString()} />)
        })}

     </Picker>

     <Button
            mode="contained"
            title='submit'
            onPress={formik.handleSubmit}
      >
        Enter
      </Button>

</View>

)}

export default App;

Lastly, test the app.

And there we have it. I hope you have found this useful. I will be back with more interesting articles. Thank you for reading.

Enjoyed this article?

Share it with your network to help others discover it

Continue Learning

Discover more articles on similar topics