En aquest tema, aprendrem a utilitzar dos components essencials per a la visualització de llistes i continguts llargs en React Native: ScrollView
i ListView
. Aquests components ens permeten gestionar continguts que excedeixen la mida de la pantalla, oferint una experiència d'usuari fluida i eficient.
ScrollView
ScrollView
és un component que permet als usuaris desplaçar-se per continguts que són més grans que la mida de la pantalla. És ideal per a continguts estàtics o llistes curtes.
Exemple bàsic de ScrollView
import React from 'react'; import { ScrollView, Text, StyleSheet } from 'react-native'; const ScrollViewExample = () => { return ( <ScrollView style={styles.container}> <Text style={styles.text}>Element 1</Text> <Text style={styles.text}>Element 2</Text> <Text style={styles.text}>Element 3</Text> <Text style={styles.text}>Element 4</Text> <Text style={styles.text}>Element 5</Text> <Text style={styles.text}>Element 6</Text> <Text style={styles.text}>Element 7</Text> <Text style={styles.text}>Element 8</Text> <Text style={styles.text}>Element 9</Text> <Text style={styles.text}>Element 10</Text> </ScrollView> ); }; const styles = StyleSheet.create({ container: { flex: 1, padding: 20, }, text: { fontSize: 20, marginVertical: 10, }, }); export default ScrollViewExample;
Explicació del codi
- Importació de components: Importem
ScrollView
,Text
iStyleSheet
dereact-native
. - Creació del component: Definim un component funcional
ScrollViewExample
. - ScrollView: Utilitzem el component
ScrollView
per embolicar diversos elementsText
. - Estils: Definim estils bàsics per al contenidor i els textos.
Propietats importants de ScrollView
horizontal
: Permet desplaçar-se horitzontalment.showsVerticalScrollIndicator
: Mostra o amaga l'indicador de desplaçament vertical.contentContainerStyle
: Estils per al contingut dins delScrollView
.
ListView
ListView
és un component més avançat que ScrollView
i està optimitzat per a llistes llargues. Tot i que ListView
ha estat reemplaçat per FlatList
i SectionList
en versions més recents de React Native, és important conèixer-lo per a la compatibilitat amb projectes antics.
Exemple bàsic de ListView
import React, { Component } from 'react'; import { ListView, Text, View, StyleSheet } from 'react-native'; const data = [ { key: 'Element 1' }, { key: 'Element 2' }, { key: 'Element 3' }, { key: 'Element 4' }, { key: 'Element 5' }, ]; class ListViewExample extends Component { constructor(props) { super(props); const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }); this.state = { dataSource: ds.cloneWithRows(data), }; } renderRow(rowData) { return ( <View style={styles.row}> <Text style={styles.text}>{rowData.key}</Text> </View> ); } render() { return ( <ListView dataSource={this.state.dataSource} renderRow={this.renderRow.bind(this)} style={styles.container} /> ); } } const styles = StyleSheet.create({ container: { flex: 1, padding: 20, }, row: { padding: 10, borderBottomWidth: 1, borderBottomColor: '#ccc', }, text: { fontSize: 20, }, }); export default ListViewExample;
Explicació del codi
- Importació de components: Importem
ListView
,Text
,View
iStyleSheet
dereact-native
. - Dades: Definim un array de dades.
- Constructor: Inicialitzem el
dataSource
deListView
en el constructor. - renderRow: Definim una funció per renderitzar cada fila.
- render: Renderitzem el
ListView
amb eldataSource
i la funciórenderRow
.
Propietats importants de ListView
dataSource
: Font de dades per alListView
.renderRow
: Funció per renderitzar cada fila.renderHeader
irenderFooter
: Funcions per renderitzar capçaleres i peus de pàgina.
Exercicis pràctics
Exercici 1: ScrollView amb imatges
Crea una aplicació que utilitzi ScrollView
per mostrar una sèrie d'imatges.
Exercici 2: ListView amb dades dinàmiques
Crea una aplicació que utilitzi ListView
per mostrar una llista de dades obtingudes d'una API.
Solucions
Solució a l'exercici 1
import React from 'react'; import { ScrollView, Image, StyleSheet } from 'react-native'; const images = [ { uri: 'https://example.com/image1.jpg' }, { uri: 'https://example.com/image2.jpg' }, { uri: 'https://example.com/image3.jpg' }, ]; const ScrollViewImages = () => { return ( <ScrollView style={styles.container}> {images.map((image, index) => ( <Image key={index} source={{ uri: image.uri }} style={styles.image} /> ))} </ScrollView> ); }; const styles = StyleSheet.create({ container: { flex: 1, padding: 20, }, image: { width: '100%', height: 200, marginBottom: 20, }, }); export default ScrollViewImages;
Solució a l'exercici 2
import React, { Component } from 'react'; import { ListView, Text, View, StyleSheet } from 'react-native'; class DynamicListView extends Component { constructor(props) { super(props); this.state = { dataSource: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }), data: [], }; } componentDidMount() { fetch('https://api.example.com/data') .then(response => response.json()) .then(data => { this.setState({ dataSource: this.state.dataSource.cloneWithRows(data), }); }); } renderRow(rowData) { return ( <View style={styles.row}> <Text style={styles.text}>{rowData.name}</Text> </View> ); } render() { return ( <ListView dataSource={this.state.dataSource} renderRow={this.renderRow.bind(this)} style={styles.container} /> ); } } const styles = StyleSheet.create({ container: { flex: 1, padding: 20, }, row: { padding: 10, borderBottomWidth: 1, borderBottomColor: '#ccc', }, text: { fontSize: 20, }, }); export default DynamicListView;
Conclusió
En aquest tema, hem après a utilitzar ScrollView
i ListView
per gestionar continguts llargs en React Native. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Ara estem preparats per avançar cap a la gestió de l'estat i el cicle de vida dels components en el següent mòdul.
Curs de React Native
Mòdul 1: Introducció a React Native
- Què és React Native?
- Configuració de l'entorn de desenvolupament
- Aplicació Hello World
- Comprendre JSX
- Components i Props
Mòdul 2: Components bàsics i estilització
- Visió general dels components bàsics
- Text, View i Image
- Estilització amb Flexbox
- Gestió de l'entrada de l'usuari
- ScrollView i ListView
Mòdul 3: Estat i cicle de vida
- Mètodes d'estat i cicle de vida
- Gestió d'esdeveniments
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Navegació
- Introducció a React Navigation
- Stack Navigator
- Tab Navigator
- Drawer Navigator
- Passar paràmetres a les rutes
Mòdul 5: Xarxes i dades
- Obtenir dades amb Fetch API
- Utilitzar Axios per a sol·licituds HTTP
- Gestió d'errors de xarxa
- AsyncStorage per a dades locals
- Integració amb APIs REST
Mòdul 6: Conceptes avançats
Mòdul 7: Desplegament i publicació
- Construcció per a iOS
- Construcció per a Android
- Publicació a l'App Store
- Publicació a Google Play
- Integració i lliurament continus