React Native is a mobile development that’s based on React that we can use to do mobile development.
In this article, we’ll look at how to use it to create an app with React Native.
TouchableNativeFeedback
The TouchableNativeFeedback component is available on Android to let us display an ink service reaction when we touch it.
For example, we can write:
import React from 'react';
import { View, StyleSheet, TouchableNativeFeedback, Text } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<TouchableNativeFeedback
onPress={() => {
alert('You tapped the button!');
}}
>
<View style={styles.button}>
<Text style={styles.buttonText}>TouchableNativeFeedback</Text>
</View>
</TouchableNativeFeedback>
</View >
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
button: {
marginBottom: 30,
width: 260,
alignItems: 'center',
backgroundColor: '#2196F3'
},
buttonText: {
textAlign: 'center',
padding: 20,
color: 'white'
}
});
to add the TouchableNativeFeedback component with content inside.
TouchableOpacity
The TouchableOpacity component is used to provide feedback by reducing the opacity of the button.
The background will be seen through it while the user presses it down.
For instance, we can write:
import React from 'react';
import { View, StyleSheet, TouchableOpacity, Text } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<TouchableOpacity
onPress={() => {
alert('You tapped the button!');
}}
>
<View style={styles.button}>
<Text style={styles.buttonText}>TouchableOpacity </Text>
</View>
</TouchableOpacity >
</View >
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
button: {
marginBottom: 30,
width: 260,
alignItems: 'center',
backgroundColor: '#2196F3'
},
buttonText: {
textAlign: 'center',
padding: 20,
color: 'white'
}
});
to add the TouchableOpacity component in our app.
TouchableWithoutFeedback
The TouchableWithoutFeedback component lets us add a touchable component without feedback.
For example, we can write:
import React from 'react';
import { View, StyleSheet, TouchableWithoutFeedback, Text } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<TouchableWithoutFeedback
onPress={() => {
alert('You tapped the button!');
}}
>
<View style={styles.button}>
<Text style={styles.buttonText}>TouchableWithoutFeedback </Text>
</View>
</TouchableWithoutFeedback >
</View >
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
button: {
marginBottom: 30,
width: 260,
alignItems: 'center',
backgroundColor: '#2196F3'
},
buttonText: {
textAlign: 'center',
padding: 20,
color: 'white'
}
});
We add the TouchableWithoutFeedback component to add a button that doesn’t have any feedback when we touch it.
Navigating Between Screens
Mobile apps usually are made of multiple screens.
Therefore, we need a way to navigate between multiple screens.
React Native lets us do this with the React Navigation library.
To install the dependencies, we first run:
npm install @react-navigation/native @react-navigation/stack
Then we install the peer dependencies in our Expo manged project by running:
expo install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
Then we can use the dependencies to add navigation by writing:
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { Button, StyleSheet, Text, View } from 'react-native';
const Stack = createStackNavigator();
const HomeScreen = ({ navigation }) => {
return (
<View style={styles.container}>
<Text> Home</Text>
<Button
title="Go to Profile"
onPress={() =>
navigation.navigate('Profile', { name: 'Jane' })
}
/>
</View>
)
}
const ProfileScreen = ({ navigation }) => {
return (
<View style={styles.container}>
<Text>Profile</Text>
<Button
title="Go to Home"
onPress={() =>
navigation.navigate('Home')
}
/>
</View>
)
}
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ title: 'Welcome' }}
/>
<Stack.Screen name="Profile" component={ProfileScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
We have 2 components HomeScreen and Profile screen which are used for our app’s screens.
It has the navigation prop that lets us call the navigate method to navigate to the page we want.
In App , we add the NavigationContainer to add navigation.
Stack.Navigator is a container for the navigable components.
Stack.Screen adds our screens.
The component prop has the component to show.
Conclusion
We can add touchable components to add touchable items that has our own content.
Also, we can add navigation with various components.