En aquest tema, aprendrem com treballar amb llistes a React Native i la importància de les claus (keys) per a la renderització eficient de components. Les llistes són una part fonamental de moltes aplicacions mòbils, ja que permeten mostrar col·leccions de dades de manera organitzada i interactiva.
Objectius
- Comprendre com renderitzar llistes a React Native.
- Aprendre a utilitzar les claus per a una renderització eficient.
- Implementar components com
FlatList
iSectionList
.
- Renderització de llistes amb
FlatList
FlatList
FlatList
és un component de React Native dissenyat per renderitzar llistes de dades de manera eficient. És ideal per a llistes llargues, ja que només renderitza els elements visibles a la pantalla.
Exemple bàsic de FlatList
import React from 'react'; import { FlatList, Text, View, StyleSheet } from 'react-native'; const DATA = [ { id: '1', title: 'Element 1' }, { id: '2', title: 'Element 2' }, { id: '3', title: 'Element 3' }, // Afegeix més elements segons sigui necessari ]; const Item = ({ title }) => ( <View style={styles.item}> <Text style={styles.title}>{title}</Text> </View> ); const App = () => { return ( <FlatList data={DATA} renderItem={({ item }) => <Item title={item.title} />} keyExtractor={item => item.id} /> ); }; const styles = StyleSheet.create({ item: { backgroundColor: '#f9c2ff', padding: 20, marginVertical: 8, marginHorizontal: 16, }, title: { fontSize: 32, }, }); export default App;
Explicació del codi
- DATA: És un array d'objectes que conté les dades que es mostraran a la llista. Cada objecte ha de tenir una propietat única
id
. - Item: És un component funcional que representa cada element de la llista.
- FlatList: El component principal que renderitza la llista. Té les següents propietats:
data
: L'array de dades que es mostrarà.renderItem
: Una funció que especifica com renderitzar cada element de la llista.keyExtractor
: Una funció que retorna una clau única per a cada element.
- Importància de les claus (keys)
Les claus són essencials per a la renderització eficient de llistes a React Native. Permeten a React identificar quins elements han canviat, afegit o eliminat. Això ajuda a optimitzar el procés de renderització i millorar el rendiment de l'aplicació.
Errors comuns amb les claus
- No utilitzar claus úniques: Si les claus no són úniques, React no podrà identificar correctament els elements.
- Utilitzar l'índex de l'array com a clau: Això pot causar problemes si l'ordre dels elements canvia.
- Renderització de llistes amb
SectionList
SectionList
SectionList
és similar a FlatList
, però permet agrupar els elements en seccions. És útil per a llistes que necessiten una estructura més complexa.
Exemple bàsic de SectionList
import React from 'react'; import { SectionList, Text, View, StyleSheet } from 'react-native'; const DATA = [ { title: 'Secció 1', data: ['Element 1', 'Element 2', 'Element 3'], }, { title: 'Secció 2', data: ['Element 4', 'Element 5', 'Element 6'], }, // Afegeix més seccions segons sigui necessari ]; const App = () => { return ( <SectionList sections={DATA} keyExtractor={(item, index) => item + index} renderItem={({ item }) => <Text style={styles.item}>{item}</Text>} renderSectionHeader={({ section: { title } }) => ( <Text style={styles.header}>{title}</Text> )} /> ); }; const styles = StyleSheet.create({ item: { backgroundColor: '#f9c2ff', padding: 20, marginVertical: 8, marginHorizontal: 16, }, header: { fontSize: 32, backgroundColor: '#fff', }, }); export default App;
Explicació del codi
- DATA: És un array d'objectes que conté les dades agrupades en seccions. Cada objecte té una propietat
title
i una propietatdata
que és un array d'elements. - SectionList: El component principal que renderitza la llista amb seccions. Té les següents propietats:
sections
: L'array de dades agrupades en seccions.keyExtractor
: Una funció que retorna una clau única per a cada element.renderItem
: Una funció que especifica com renderitzar cada element de la llista.renderSectionHeader
: Una funció que especifica com renderitzar el capçal de cada secció.
Exercicis pràctics
Exercici 1: Crear una llista de contactes
Crea una aplicació que mostri una llista de contactes utilitzant FlatList
. Cada contacte ha de tenir un nom i un número de telèfon.
Exercici 2: Crear una llista de tasques amb seccions
Crea una aplicació que mostri una llista de tasques agrupades per categories utilitzant SectionList
. Cada tasca ha de tenir un títol i una descripció.
Solucions
Solució de l'exercici 1
import React from 'react'; import { FlatList, Text, View, StyleSheet } from 'react-native'; const CONTACTS = [ { id: '1', name: 'John Doe', phone: '123-456-7890' }, { id: '2', name: 'Jane Smith', phone: '098-765-4321' }, // Afegeix més contactes segons sigui necessari ]; const ContactItem = ({ name, phone }) => ( <View style={styles.item}> <Text style={styles.name}>{name}</Text> <Text style={styles.phone}>{phone}</Text> </View> ); const App = () => { return ( <FlatList data={CONTACTS} renderItem={({ item }) => <ContactItem name={item.name} phone={item.phone} />} keyExtractor={item => item.id} /> ); }; const styles = StyleSheet.create({ item: { backgroundColor: '#f9c2ff', padding: 20, marginVertical: 8, marginHorizontal: 16, }, name: { fontSize: 24, }, phone: { fontSize: 18, }, }); export default App;
Solució de l'exercici 2
import React from 'react'; import { SectionList, Text, View, StyleSheet } from 'react-native'; const TASKS = [ { title: 'Personal', data: [ { id: '1', title: 'Comprar menjar', description: 'Comprar verdures i fruites' }, { id: '2', title: 'Fer exercici', description: 'Correr 5 km' }, ], }, { title: 'Treball', data: [ { id: '3', title: 'Reunió amb el client', description: 'Discutir els requisits del projecte' }, { id: '4', title: 'Enviar informe', description: 'Enviar l'informe mensual' }, ], }, // Afegeix més seccions i tasques segons sigui necessari ]; const TaskItem = ({ title, description }) => ( <View style={styles.item}> <Text style={styles.title}>{title}</Text> <Text style={styles.description}>{description}</Text> </View> ); const App = () => { return ( <SectionList sections={TASKS} keyExtractor={(item, index) => item.id} renderItem={({ item }) => <TaskItem title={item.title} description={item.description} />} renderSectionHeader={({ section: { title } }) => ( <Text style={styles.header}>{title}</Text> )} /> ); }; const styles = StyleSheet.create({ item: { backgroundColor: '#f9c2ff', padding: 20, marginVertical: 8, marginHorizontal: 16, }, title: { fontSize: 24, }, description: { fontSize: 18, }, header: { fontSize: 32, backgroundColor: '#fff', }, }); export default App;
Conclusió
En aquesta secció, hem après com treballar amb llistes a React Native utilitzant FlatList
i SectionList
. També hem vist la importància de les claus per a la renderització eficient de components. Amb aquests coneixements, estàs preparat per crear aplicacions que mostrin col·leccions de dades de manera organitzada i eficient. En el següent tema, explorarem com treballar amb formularis i components controlats.
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