Empty States
Save time and effort with our collection of pre-made empty state components, perfect for any React Native app.
-
Modern Empty State with Multiple Actions
-
Simple Empty State with Action
-
Simple Empty State with Skeleton
-
Dark Mode Empty State with Multiple Actions
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
<View>
<Text style={styles.text}>in voluptate velit esse cillum dolore eu fugiat nulla</Text>
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
<View>
<Text style={styles.text}>in voluptate velit esse cillum dolore eu fugiat nulla</Text>
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
<View>
<Text style={styles.text}>in voluptate velit esse cillum dolore eu fugiat nulla</Text>
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
<View>
<Text style={styles.text}>in voluptate velit esse cillum dolore eu fugiat nulla</Text>
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
import React from 'react';
import {
StyleSheet,
SafeAreaView,
View,
TouchableOpacity,
Text,
} from 'react-native';
import FeatherIcon from 'react-native-vector-icons/Feather';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
export default function Example() {
return (
<SafeAreaView style={{ flex: 1, backgroundColor: '#fff' }}>
<View style={styles.container}>
<View style={styles.header}>
<View style={styles.headerTop}>
<View style={styles.headerAction} />
<View style={styles.headerAction}>
<TouchableOpacity
onPress={() => {
// handle onPress
}}>
<FeatherIcon
color="#266EF1"
name="user-plus"
size={21} />
</TouchableOpacity>
</View>
</View>
<Text style={styles.headerTitle}>Messages</Text>
</View>
<View style={styles.empty}>
<View style={styles.fake}>
<View style={styles.fakeCircle} />
<View>
<View style={[styles.fakeLine, { width: 120 }]} />
<View style={styles.fakeLine} />
<View
style={[
styles.fakeLine,
{ width: 70, marginBottom: 0 },
]} />
</View>
</View>
<View style={[styles.fake, { opacity: 0.5 }]}>
<View style={styles.fakeCircle} />
<View>
<View style={[styles.fakeLine, { width: 120 }]} />
<View style={styles.fakeLine} />
<View
style={[
styles.fakeLine,
{ width: 70, marginBottom: 0 },
]} />
</View>
</View>
<Text style={styles.emptyTitle}>Your inbox is empty</Text>
<Text style={styles.emptyDescription}>
Once you start a new conversation, you'll see new messages here
</Text>
</View>
<TouchableOpacity
onPress={() => {
// handle onPress
}}>
<View style={styles.btn}>
<View style={{ width: 34 }} />
<Text style={styles.btnText}>Start New Conversation</Text>
<MaterialCommunityIcons
color="#fff"
name="plus"
size={22}
style={{ marginLeft: 12 }} />
</View>
</TouchableOpacity>
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
paddingBottom: 24,
flexGrow: 1,
flexShrink: 1,
flexBasis: 0,
},
/** Header */
header: {
paddingHorizontal: 16,
marginBottom: 12,
},
headerTop: {
marginHorizontal: -6,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
},
headerAction: {
width: 40,
height: 40,
alignItems: 'center',
justifyContent: 'center',
},
headerTitle: {
fontSize: 35,
fontWeight: '700',
color: '#1d1d1d',
},
/** Empty */
empty: {
flexGrow: 1,
flexShrink: 1,
flexBasis: 0,
alignItems: 'center',
justifyContent: 'center',
marginBottom: 100,
},
emptyTitle: {
fontSize: 19,
fontWeight: '700',
color: '#222',
marginBottom: 8,
marginTop: 12,
},
emptyDescription: {
fontSize: 15,
lineHeight: 22,
fontWeight: '500',
color: '#8c9197',
textAlign: 'center',
},
/** Fake */
fake: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
marginBottom: 24,
},
fakeCircle: {
width: 44,
height: 44,
borderRadius: 9999,
backgroundColor: '#e8e9ed',
marginRight: 16,
},
fakeLine: {
width: 200,
height: 10,
borderRadius: 4,
backgroundColor: '#e8e9ed',
marginBottom: 8,
},
/** Button */
btn: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 8,
paddingVertical: 10,
paddingHorizontal: 20,
borderWidth: 1,
backgroundColor: '#266EF1',
borderColor: '#266EF1',
marginTop: 'auto',
marginHorizontal: 24,
},
btnText: {
fontSize: 18,
lineHeight: 26,
fontWeight: '600',
color: '#fff',
},
});import React from 'react';
import {
StyleSheet,
SafeAreaView,
View,
TouchableOpacity,
Text,
} from 'react-native';
import FeatherIcon from '@expo/vector-icons/Feather';
import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
export default function Example() {
return (
<SafeAreaView style={{ flex: 1, backgroundColor: '#fff' }}>
<View style={styles.container}>
<View style={styles.header}>
<View style={styles.headerTop}>
<View style={styles.headerAction} />
<View style={styles.headerAction}>
<TouchableOpacity
onPress={() => {
// handle onPress
}}>
<FeatherIcon
color="#266EF1"
name="user-plus"
size={21} />
</TouchableOpacity>
</View>
</View>
<Text style={styles.headerTitle}>Messages</Text>
</View>
<View style={styles.empty}>
<View style={styles.fake}>
<View style={styles.fakeCircle} />
<View>
<View style={[styles.fakeLine, { width: 120 }]} />
<View style={styles.fakeLine} />
<View
style={[
styles.fakeLine,
{ width: 70, marginBottom: 0 },
]} />
</View>
</View>
<View style={[styles.fake, { opacity: 0.5 }]}>
<View style={styles.fakeCircle} />
<View>
<View style={[styles.fakeLine, { width: 120 }]} />
<View style={styles.fakeLine} />
<View
style={[
styles.fakeLine,
{ width: 70, marginBottom: 0 },
]} />
</View>
</View>
<Text style={styles.emptyTitle}>Your inbox is empty</Text>
<Text style={styles.emptyDescription}>
Once you start a new conversation, you'll see new messages here
</Text>
</View>
<TouchableOpacity
onPress={() => {
// handle onPress
}}>
<View style={styles.btn}>
<View style={{ width: 34 }} />
<Text style={styles.btnText}>Start New Conversation</Text>
<MaterialCommunityIcons
color="#fff"
name="plus"
size={22}
style={{ marginLeft: 12 }} />
</View>
</TouchableOpacity>
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
paddingBottom: 24,
flexGrow: 1,
flexShrink: 1,
flexBasis: 0,
},
/** Header */
header: {
paddingHorizontal: 16,
marginBottom: 12,
},
headerTop: {
marginHorizontal: -6,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
},
headerAction: {
width: 40,
height: 40,
alignItems: 'center',
justifyContent: 'center',
},
headerTitle: {
fontSize: 35,
fontWeight: '700',
color: '#1d1d1d',
},
/** Empty */
empty: {
flexGrow: 1,
flexShrink: 1,
flexBasis: 0,
alignItems: 'center',
justifyContent: 'center',
marginBottom: 100,
},
emptyTitle: {
fontSize: 19,
fontWeight: '700',
color: '#222',
marginBottom: 8,
marginTop: 12,
},
emptyDescription: {
fontSize: 15,
lineHeight: 22,
fontWeight: '500',
color: '#8c9197',
textAlign: 'center',
},
/** Fake */
fake: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
marginBottom: 24,
},
fakeCircle: {
width: 44,
height: 44,
borderRadius: 9999,
backgroundColor: '#e8e9ed',
marginRight: 16,
},
fakeLine: {
width: 200,
height: 10,
borderRadius: 4,
backgroundColor: '#e8e9ed',
marginBottom: 8,
},
/** Button */
btn: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 8,
paddingVertical: 10,
paddingHorizontal: 20,
borderWidth: 1,
backgroundColor: '#266EF1',
borderColor: '#266EF1',
marginTop: 'auto',
marginHorizontal: 24,
},
btnText: {
fontSize: 18,
lineHeight: 26,
fontWeight: '600',
color: '#fff',
},
});
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
<View>
<Text style={styles.text}>in voluptate velit esse cillum dolore eu fugiat nulla</Text>
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
<View>
<Text style={styles.text}>in voluptate velit esse cillum dolore eu fugiat nulla</Text>
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;