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,TextiStyleSheetdereact-native. - Creació del component: Definim un component funcional
ScrollViewExample. - ScrollView: Utilitzem el component
ScrollViewper 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,ViewiStyleSheetdereact-native. - Dades: Definim un array de dades.
- Constructor: Inicialitzem el
dataSourcedeListViewen el constructor. - renderRow: Definim una funció per renderitzar cada fila.
- render: Renderitzem el
ListViewamb eldataSourcei la funciórenderRow.
Propietats importants de ListView
dataSource: Font de dades per alListView.renderRow: Funció per renderitzar cada fila.renderHeaderirenderFooter: 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
