En aquest tema, aprendrem com gestionar errors de xarxa en aplicacions React Native. La gestió adequada dels errors és crucial per proporcionar una bona experiència d'usuari i assegurar que l'aplicació pugui manejar situacions inesperades de manera elegant.
Objectius
- Comprendre la importància de la gestió d'errors de xarxa.
- Aprendre a capturar i gestionar errors utilitzant
try...catch. - Implementar estratègies per mostrar missatges d'error a l'usuari.
- Veure exemples pràctics de gestió d'errors amb
Fetch APIiAxios.
Importància de la gestió d'errors de xarxa
Quan una aplicació depèn de dades externes, és inevitable que es produeixin errors de xarxa, com ara pèrdua de connexió, temps d'espera esgotat o respostes invàlides del servidor. La gestió d'aquests errors és essencial per:
- Evitar que l'aplicació es bloquegi.
- Proporcionar informació útil a l'usuari sobre el problema.
- Permetre a l'usuari intentar novament l'operació fallida.
Captura i gestió d'errors amb try...catch
La manera més comuna de gestionar errors en JavaScript és utilitzar blocs try...catch. Això ens permet capturar errors i manejar-los de manera controlada.
Exemple amb Fetch API
import React, { useState, useEffect } from 'react';
import { View, Text, Button, ActivityIndicator } from 'react-native';
const FetchDataComponent = () => {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fetchData = async () => {
setLoading(true);
setError(null);
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Network response was not ok');
}
const result = await response.json();
setData(result);
} catch (error) {
setError(error.message);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchData();
}, []);
if (loading) {
return <ActivityIndicator />;
}
if (error) {
return (
<View>
<Text>Error: {error}</Text>
<Button title="Retry" onPress={fetchData} />
</View>
);
}
return (
<View>
<Text>Data: {JSON.stringify(data)}</Text>
</View>
);
};
export default FetchDataComponent;Explicació del codi
- Estat inicial: Definim tres estats:
dataper emmagatzemar les dades,loadingper indicar si les dades s'estan carregant, ierrorper emmagatzemar qualsevol missatge d'error. - Funció
fetchData: Aquesta funció utilitzatry...catchper capturar errors durant la sol·licitud de xarxa. Si la resposta no és correcta (response.ok), es llança un error. - Gestió de l'error: Si es produeix un error, es captura i s'emmagatzema en l'estat
error. També es proporciona un botó per intentar novament la sol·licitud. - Renderització condicional: Si l'aplicació està carregant, es mostra un indicador d'activitat. Si hi ha un error, es mostra el missatge d'error i un botó per reintentar. Si tot va bé, es mostren les dades.
Exemple amb Axios
import React, { useState, useEffect } from 'react';
import { View, Text, Button, ActivityIndicator } from 'react-native';
import axios from 'axios';
const AxiosDataComponent = () => {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fetchData = async () => {
setLoading(true);
setError(null);
try {
const response = await axios.get('https://api.example.com/data');
setData(response.data);
} catch (error) {
setError(error.message);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchData();
}, []);
if (loading) {
return <ActivityIndicator />;
}
if (error) {
return (
<View>
<Text>Error: {error}</Text>
<Button title="Retry" onPress={fetchData} />
</View>
);
}
return (
<View>
<Text>Data: {JSON.stringify(data)}</Text>
</View>
);
};
export default AxiosDataComponent;Explicació del codi
El codi és molt similar a l'exemple anterior amb Fetch API, però utilitza axios per fer la sol·licitud de xarxa. axios proporciona una interfície més rica i fàcil d'utilitzar per gestionar sol·licituds HTTP.
Estratègies per mostrar missatges d'error
- Missatges clars i concisos: Proporciona missatges d'error que siguin fàcils d'entendre per l'usuari.
- Opcions de reintentar: Ofereix una manera fàcil per a l'usuari de reintentar l'operació fallida.
- Logs per a desenvolupadors: Registra errors en un servei de monitorització per ajudar a diagnosticar i solucionar problemes.
Exercici pràctic
Implementa una funció que faci una sol·licitud a una API i gestioni els errors de xarxa. Proporciona un missatge d'error a l'usuari i una opció per reintentar la sol·licitud.
Solució
import React, { useState, useEffect } from 'react';
import { View, Text, Button, ActivityIndicator } from 'react-native';
const NetworkErrorHandlingComponent = () => {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fetchData = async () => {
setLoading(true);
setError(null);
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Network response was not ok');
}
const result = await response.json();
setData(result);
} catch (error) {
setError(error.message);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchData();
}, []);
if (loading) {
return <ActivityIndicator />;
}
if (error) {
return (
<View>
<Text>Error: {error}</Text>
<Button title="Retry" onPress={fetchData} />
</View>
);
}
return (
<View>
<Text>Data: {JSON.stringify(data)}</Text>
</View>
);
};
export default NetworkErrorHandlingComponent;Conclusió
La gestió d'errors de xarxa és una part essencial del desenvolupament d'aplicacions React Native. Utilitzant try...catch i proporcionant missatges d'error clars i opcions de reintentar, podem millorar significativament l'experiència d'usuari i assegurar que l'aplicació sigui robusta i fiable.
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
