Nós vamos começar agora a entender o ScrollView e o FlatList. Vamos começar falando do ScrollView, vamos começar criando uma tela para ele em um componente chamado ScrollViewScreen.js.
O componente ScrollView funciona de forma parecida com o View que já utilizamos, porém ele permite “rolar” a tela para baixo, não se limitando à altura da tela do dispositivo. Quando utilizamos o ScrollView é importante que ele tenha uma altura definida para evitar problemas. Além disso, uma característica do ScrollView que vale ser destacada é que ele renderiza todos os seus filhos de uma vez, o que pode levar a problemas de performance.
Para resolver isso temos o componente FlatList, que renderiza os items quando eles estão para aparecer na tela, e os remove ao saírem da tela para economizar memória e tempo de processamento. Ele também é útil para trabalharmos com múltiplas colunas, scroll infinito (pense no feed do Instagram, por exemplo), e vários outros casos.
import { View, Text, StyleSheet } from "react-native";
export default function ScrollViewScreen() {
return (
<View style={styles.container}>
<Text style={styles.title}>ScrollView</Text>
<Text style={styles.item}>
1 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
<Text style={styles.item}>
2 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
<Text style={styles.item}>
3 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
<Text style={styles.item}>
4 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
<Text style={styles.item}>
5 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
<Text style={styles.item}>
6 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingHorizontal: 16,
marginHorizontal: 3,
marginVertical: 32
},
title: {
fontSize: 40,
color: '#f64348'
},
button: {
backgroundColor: "#1c1a1d",
padding: 10,
borderRadius: 10,
marginTop: 20,
},
buttonText: {
color: "#FFFFFF",
},
item: {
fontSize: 16,
marginTop: 16
},
})
// ...
const toScrollViewScreen = () => {
navigation.navigate('ScrollView')
}
return (
<View style={styles.container}>
<Text style={styles.title}>Olá, mundo!</Text>
<StatusBar style="auto" />
<TouchableOpacity
activeOpacity={0.8}
style={styles.button}
onPress={toNavigationScreen}
>
<Text style={styles.buttonText}>Aula de Navegação</Text>
</TouchableOpacity>
<TouchableOpacity
activeOpacity={0.8}
style={styles.button}
onPress={toScrollViewScreen}
>
<Text style={styles.buttonText}>Aula de ScrollView</Text>
</TouchableOpacity>
</View>
)
// ...
// ...
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Navigation" component={NavigationScreen} />
<Stack.Screen name="SrollView" component={ScrollViewScreen} />
// ...
import { View, Text, StyleSheet, ScrollView } from "react-native";
export default function ScrollViewScreen() {
return (
<View style={styles.container}>
<Text style={styles.title}>ScrollView</Text>
<ScrollView>
<Text style={styles.item}>
1 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
// ...
<Text style={styles.item}>
6 - Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi
consectetur corporis debitis natus rerum? Facere magni enim non hic
optio aliquid corporis modi repellat quod quos vero ut adipisci
exercitationem iure sed molestiae totam, maxime voluptatum ipsam a ad
inventore quae quis! Soluta quisquam odio magnam veniam, quae dicta
aliquam.
</Text>
</ScrollView>
</View>
);
}
// ...