OUJOOD.COM
Introduction
Dans ce tutoriel, nous allons explorer comment gérer les données dans une application React. Nous verrons comment interagir avec des APIs pour récupérer et envoyer des données, ainsi que comment gérer les erreurs qui peuvent survenir lors de ces opérations. Nous aborderons deux méthodes principales pour effectuer des requêtes HTTP : Fetch (une méthode native de JavaScript) et Axios (une bibliothèque populaire).
L'API utilisée : JSONPlaceholder
Dans les exemples de ce tutoriel, nous utilisons une API publique appelée JSONPlaceholder. JSONPlaceholder est une API REST factice gratuite, conçue pour simuler des données réelles dans des applications de test et de démonstration. Elle fournit des endpoints pour des ressources telles que des articles, des utilisateurs, des commentaires et des albums.
Voici quelques caractéristiques de JSONPlaceholder :
- Facile à utiliser : Aucune authentification n'est requise, ce qui en fait un outil idéal pour les débutants.
- Endpoints disponibles : Vous pouvez accéder à des ressources comme
/posts
,/users
,/comments
, etc. - Opérations CRUD : JSONPlaceholder prend en charge les opérations de création, lecture, mise à jour et suppression (CRUD), bien que les modifications ne soient pas réellement persistées.
- Données factices : Les données renvoyées sont générées automatiquement et sont parfaites pour tester des applications sans avoir besoin d'un backend réel.
Dans nos exemples, nous utilisons l'endpoint /posts
pour récupérer une liste d'articles factices. Vous pouvez explorer d'autres endpoints en consultant la documentation officielle de JSONPlaceholder.
Utilisation de Fetch pour interagir avec une API
Fetch est une méthode native de JavaScript pour effectuer des requêtes HTTP. Elle est simple à utiliser et ne nécessite aucune installation supplémentaire. Voici un exemple complet d'utilisation de Fetch pour récupérer des données depuis une API :
import React, { useEffect, useState } from 'react'; function App() { // État pour stocker les données récupérées const [data, setData] = useState(null); // État pour gérer le chargement const [loading, setLoading] = useState(true); // État pour gérer les erreurs const [error, setError] = useState(null); // useEffect est utilisé pour effectuer la requête API au chargement du composant useEffect(() => { // Effectuer une requête GET à l'API fetch('https://jsonplaceholder.typicode.com/posts') .then(response => { // Vérifier si la réponse est valide (statut 200-299) if (!response.ok) { throw new Error('Erreur réseau'); } // Convertir la réponse en JSON return response.json(); }) .then(data => { // Mettre à jour l'état avec les données récupérées setData(data); // Indiquer que le chargement est terminé setLoading(false); }) .catch(error => { // Capturer et gérer les erreurs setError(error.message); // Indiquer que le chargement est terminé (même en cas d'erreur) setLoading(false); }); }, []); // Le tableau vide [] signifie que cet effet ne s'exécute qu'une fois, au montage du composant // Afficher un message de chargement si les données sont en cours de récupération if (loading) return <div>Chargement...</div>; // Afficher un message d'erreur si une erreur est survenue if (error) return <div>Erreur : {error}</div>; // Afficher les données récupérées return ( <div> <h1>Liste des articles</h1> <ul> {data.map(post => ( <li key={post.id}>{post.title}</li> ))} </ul> </div> ); } export default App;
Explication détaillée du code :
- useState :
data
: Stocke les données récupérées depuis l'API.loading
: Indique si les données sont en cours de chargement.error
: Stocke les messages d'erreur en cas de problème.
- useEffect :
- Ce hook est utilisé pour effectuer des effets secondaires, comme des requêtes API, au montage du composant.
- Le tableau vide
[]
signifie que l'effet ne s'exécute qu'une seule fois, après le premier rendu.
- fetch :
- Effectue une requête GET à l'URL spécifiée.
- La méthode
.then
est utilisée pour traiter la réponse. - Si la réponse n'est pas valide (statut HTTP en dehors de 200-299), une erreur est levée.
- Gestion des erreurs :
- Les erreurs sont capturées dans le bloc
.catch
. - Le message d'erreur est stocké dans l'état
error
et affiché à l'utilisateur.
- Les erreurs sont capturées dans le bloc
Utilisation d'Axios pour interagir avec une API
Axios est une bibliothèque populaire pour effectuer des requêtes HTTP. Elle offre une syntaxe plus concise et des fonctionnalités supplémentaires, comme l'annulation de requêtes et la gestion automatique des erreurs réseau. Voici comment l'utiliser pour récupérer des données :
import React, { useEffect, useState } from 'react'; import axios from 'axios'; function App() { // État pour stocker les données récupérées const [data, setData] = useState(null); // État pour gérer le chargement const [loading, setLoading] = useState(true); // État pour gérer les erreurs const [error, setError] = useState(null); // useEffect est utilisé pour effectuer la requête API au chargement du composant useEffect(() => { // Effectuer une requête GET à l'API avec Axios axios.get('https://jsonplaceholder.typicode.com/posts') .then(response => { // Mettre à jour l'état avec les données récupérées setData(response.data); // Indiquer que le chargement est terminé setLoading(false); }) .catch(error => { // Capturer et gérer les erreurs setError(error.message); // Indiquer que le chargement est terminé (même en cas d'erreur) setLoading(false); }); }, []); // Le tableau vide [] signifie que cet effet ne s'exécute qu'une fois, au montage du composant // Afficher un message de chargement si les données sont en cours de récupération if (loading) return <div>Chargement...</div>; // Afficher un message d'erreur si une erreur est survenue if (error) return <div>Erreur : {error}</div>; // Afficher les données récupérées return ( <div> <h1>Liste des articles</h1> <ul> {data.map(post => ( <li key={post.id}>{post.title}</li> ))} </ul> </div> ); } export default App;
Explication détaillée du code :
- axios.get :
- Effectue une requête GET à l'URL spécifiée.
- Axios gère automatiquement la conversion de la réponse en JSON, ce qui simplifie le code.
- Gestion des erreurs :
- Les erreurs sont capturées dans le bloc
.catch
. - Axios fournit des messages d'erreur détaillés, ce qui facilite le débogage.
- Les erreurs sont capturées dans le bloc
- Avantages d'Axios :
- Syntaxe plus concise que Fetch.
- Gestion automatique des erreurs réseau.
- Possibilité d'annuler des requêtes en cours.
Gestion des erreurs lors des appels API
La gestion des erreurs est cruciale pour offrir une bonne expérience utilisateur. Voici comment gérer les erreurs avec Fetch et Axios :
Avec Fetch :
fetch('https://jsonplaceholder.typicode.com/invalid-url') .then(response => { if (!response.ok) { throw new Error('Erreur réseau'); } return response.json(); }) .catch(error => { console.error('Erreur :', error); });
Avec Axios :
axios.get('https://jsonplaceholder.typicode.com/invalid-url') .catch(error => { console.error('Erreur :', error.message); });
Dans les deux cas, les erreurs sont capturées et gérées de manière appropriée. Avec Axios, les erreurs réseau sont automatiquement capturées, tandis qu'avec Fetch, vous devez vérifier manuellement le statut de la réponse.
Conclusion
Vous avez maintenant une solide compréhension de la gestion des données dans React. Pour continuer votre apprentissage, découvrez comment maîtriser le routage avancé avec React Router dans le chapitre suivant : Routage Avancé avec React Router.
N'hésitez pas à consulter nos autres tutoriels pour approfondir vos connaissances en React.