Using a SegmentControl to show different views in React Native

Using this Module: react-native-segmented-control-tab

One of the tasks that I have received from my current company was to create a screen that contains a segment to display two different views, depending on the selected segment. It has been quite sometime that I have been digging into the React Native world so here I am thinking why not share some knowledge?

Getting Started

So once you have created a React Native project, (if you don’t know how, go to this link: https://reactnative.dev/docs/0.60/getting-started). Once you have your project open, make sure that you add the module on your terminal.

yarn add react-native-segmented-control-tab

After you have added the module, create a file (call it whatever you want), and add the following code:

import React, { Component } from 'react';import { View, Text, StyleSheet } from 'react-native';import SegmentedControlTab from 'react-native-segmented-control-tab';class SegmentScreen extends Component {  constructor() {
super();

this.state = {
selectedIndex: 0
}
}
handleIndexChange = index => {

this.setState({
...this.state,
selectedIndex: index
});
}
render () {
return (
<View style={styles.container}>
<SegmentedControlTab
values = { ["Segment 1", "Segment 2"] }
selectedIndex = { this.state.selectedIndex }
onTabPress = { this.handleIndexChange }
tabsContainerStyle = { styles.tabsContainerStyle }
tabStyle = { styles.tabStyle }
tabTextStyle = { styles.tabTextStyle }
activeTabStyle = { styles.activeTabStyle }
activeTabTextStyle = { styles.activeTabTextStyle }
borderRadius = {10}
/>
</View>
)
}
}
export default SegmentScreen;

If you need more info on the module and it’s props, check the repo out!: https://github.com/kirankalyan5/react-native-segmented-control-tab

Styling the SegmentControl Component

Style it however you want. But in case you have short amount of time, I got your back.

const styles = StyleSheet.create({  container: {                
backgroundColor: 'black',
flex: 1,
alignItems: 'center', justifyContent: 'center'
},

tabContainerStyle: {
backgroundColor: 'transparent',
width: '100%', height: '8%',
borderRadius: 10
},
tabStyle: {
backgroundColor: 'lightgray',
borderRadius: 10, borderColor: 'transparent',
fontSize: 18,
margin: 5
},
tabTextStyle: {
color: '#818181',
fontSize: 18
},

activeTabStyle: {
backgroundColor: 'white',
borderRadius: 10, borderColor: 'transparent',
margin: 5
},
activeTabTextStyle: {
color: 'black',
fontSize: 18
},
textStyle: {
color: 'white',
fontSize: 20, fontWeight: '700',
marginTop: 40
}
});

Switching views to the appropriate segment

Now that you got your SegmentControlTab looking good, it’s time to do the logic implementation. It is quite easy actually. Add this inside your main View component (under the <SegmentControlTab> component)

{
this.state.selectedIndex === 0 ?
<Text style {styles.textStyle}>Segment View #1</Text> :
<Text style={styles.textStyle}>Segment View #2</Text>
}

Pretty straight forward. Depending on the tab that the user tapped, using a state can help us keep track of which tab the user is on

Good to go!

Short and easy right? You know I got you! However, if there is any experienced React Native Developers out there that can provide any advice to improve on the code I provided, please feel free to comment!

As always, Happy Coding!

Down to earth & passionate iOS Engineer