React et Redux sont des outils de développement web populaires pour gérer l’état et développer des interfaces utilisateur dynamiques.
L’accès à l’information peut être difficile et prendre du temps, en particulier lorsqu’il s’agit d’événements asynchrones. Redux-Saga, un middleware facile à utiliser qui gère les activités asynchrones, peut simplifier ce processus.
Découvrez comment React construit une application qui récupère des données à partir de Redux-Saga.
Comprendre Redux-Saga
Redux-Saga est un middleware qui simplifie la gestion et le test des effets de bord tels que l’accès au stockage du navigateur et les requêtes API asynchrones. L’utilisation de fonctions génératrices fait apparaître le code asynchrone comme synchrone, ce qui facilite le raisonnement et le débogage.
Redux-Saga fonctionne en recherchant des actions Redux spécifiques et en déclenchant des Sagas, qui sont des fonctions génératrices d’effets de bord. Les Sagas peuvent exécuter des opérations asynchrones, telles que l’obtention de données à partir d’une API, puis envoyer une nouvelle action Redux pour mettre à jour l’état.
Prenons l’exemple de l’utilisation de Redux-Saga pour gérer les appels API asynchrones. Commencez par créer une action Redux qui initie la procédure de collecte de données :
export const FETCH_DATA = 'FETCH_DATA';
export const fetchData = (params) => ({
type: FETCH_DATA,
payload: params,
});
La charge utile de l’action, FETCH_DATA, comprend tous les paramètres essentiels, comme le point de terminaison de l’API et les paramètres de la demande.
Ensuite, définissez un Saga qui écoute l’activité FETCH_DATA et effectue la collecte des données :
import { call, put, takeLatest } from 'redux-saga/effects';
import axios from 'axios';
export function* fetchDataSaga(action) {
try {
const response = yield call(axios.get, action.payload.endpoint, {
params: action.payload.params,
});
yield put({ type: 'FETCH_DATA_SUCCESS', payload: response.data });
} catch (error) {
yield put({ type: 'FETCH_DATA_ERROR', payload: error });
}
}
export function* watchFetchData() {
yield takeLatest(FETCH_DATA, fetchDataSaga);
}
Cette Saga fait un appel à l’API axios utilisant la bibliothèque appel effect. Il envoie ensuite les données récupérées en tant que charge utile d’une nouvelle action Redux avec le type FETCH_DATA_SUCCESS. En cas d’erreur, il envoie une nouvelle action Redux avec l’objet d’erreur comme charge utile et un type FETCH_DATA_ERROR.
Enfin, vous devez enregistrer la Saga avec le magasin Redux en utilisant le middleware redux-saga :
import { applyMiddleware, createStore } from 'redux';
import createSagaMiddleware from 'redux-saga';
import rootReducer from './reducers';
const sagaMiddleware = createSagaMiddleware();
const store = createStore(rootReducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(watchFetchData);
En enregistrant la watchFetchData Saga avec la nouvelle instance middleware, ce code crée un autre redux-saga. L’intergiciel est mis en place sur le magasin Redux en utilisant ApplyMiddleware.
Redux-Saga, en général, fournit une approche solide et polyvalente pour gérer les activités asynchrones dans les applications Redux de React. Vous pouvez rationaliser la récupération des données et générer un code plus facile à tester, à maintenir et à mettre à jour en utilisant des sagas pour contrôler les bogues du code.
Problèmes courants de collecte de données dans les applications React
Il y a quelques difficultés que les développeurs rencontrent fréquemment lorsqu’ils utilisent la récupération de données de React. En voici quelques exemples :
- Gestion des actions asynchrones : Il s’agit d’informations fournies par une interface de programmation qui assure le suivi des opérations non simultanées sans interférer avec l’interface utilisateur. Travailler avec plusieurs requêtes API ou des données qui dépendent d’autres données peut rendre cela difficile.
- Gestion des erreurs : Les appels à l’API peuvent échouer et il est essentiel de gérer ces erreurs correctement. Il s’agit notamment de fournir des messages d’erreur à l’utilisateur et de lui permettre de soumettre à nouveau la demande.
- Mise à jour du magasin Redux : Vous devez enregistrer les informations acquises à partir d’une API dans le magasin Redux afin que d’autres composants puissent y accéder. Il est crucial de mettre à jour le magasin sans interférer avec les données existantes ou les corrompre.
Comment utiliser Redux-Saga pour récupérer des données dans React
L’utilisation de Redux-Saga pour la récupération de données vous permet de séparer la logique des appels à l’API et le traitement de la réponse de vos composants React. Ainsi, vous pouvez vous concentrer sur le rendu des données et réagir aux interactions de l’utilisateur pendant que les Sagas gèrent la récupération asynchrone des données et la gestion des erreurs.
Vous devez enregistrer l’élément watchFetchData Saga avec les Redux-Saga middleware pour utiliser les Sagas dans notre magasin Redux :
// src/store.js
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';
import rootReducer from './reducers';
import { watchFetchData } from './sagas/dataSaga';
const sagaMiddleware = createSagaMiddleware();
const store = createStore(rootReducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(watchFetchData);
export default store;
Ce code enregistre le sagaMiddleware avec le magasin Redux en utilisant la méthode applyMiddleware et la fonction créerSagaMiddleware de la méthode redux-saga . Ensuite, en utilisant le paquet exécuter elle exécute la méthode watchFetchData Saga.
Votre configuration Redux-Saga est complète maintenant que chaque composant est en place. Le Saga utilise la méthode fetchDataApi pour récupérer les données lorsque votre composant React envoie l’action FETCH_DATA_REQUEST. Si la récupération des données programmée est réussie, elle envoie une autre activité avec les données récupérées. En cas d’erreur, elle envoie une nouvelle action avec l’objet d’erreur.
// src/components/DataComponent.js
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { fetchDataRequest } from '../actions/dataActions';
const DataComponent = () => {
const dispatch = useDispatch();
const { data, isLoading, error } = useSelector((state) => state.data);
useEffect(() => {
dispatch(fetchDataRequest({ param1: 'value1', param2: 'value2' }));
}, [dispatch]);
if (isLoading) {
return <div>Loading...</div>;
}
if (error) {
return <div>Error: {error.message}</div>;
}
return (
<div>
{data.map((item) => (
<div key={item.id}>{item.name}</div>
))}
</div>
);
};
export default DataComponent;
Dans l’exemple ci-dessus, vous utilisez la méthode useSelector dans votre composant React pour obtenir les données, isLoadinget erreur depuis le magasin Redux. Vous distribuez également l’action FETCH_DATA_REQUEST à l’aide du crochet useEffect() lorsque le composant est monté. Vous rendez les données, le message de chargement ou le message d’erreur en fonction de l’élément données valeurs, isLoadinget erreur.
En tirant parti de Redux-Saga pour la récupération des données, la gestion des demandes d’API asynchrones dans une application React peut être considérablement rationalisée. Vous pouvez créer un code plus facile à maintenir et plus modulaire en isolant la logique d’appel à l’API de vos composants et en gérant le flux asynchrone dans des sagas.
Meilleures pratiques pour l’utilisation de Redux-Saga pour la récupération de données
Suivez ces bonnes pratiques lors de l’utilisation de Redux-Saga pour la récupération de données :
- Utilisez des Saga distinctes pour chaque opération de collecte de données. Il est conseillé de séparer une Saga pour chaque processus de collecte de données plutôt que d’inclure toute la logique dans une seule Saga. La maintenance et la modification du code sont plus simples puisque vous pouvez immédiatement trouver les sagas pertinentes pour certaines activités.
- Utiliser la gestion des erreurs intégrée à Redux-Saga. Vous pouvez utiliser le bloc try/catch de Redux-Saga pour gérer les erreurs automatiquement. Cela nous permet de gérer les échecs de manière centralisée et de fournir aux utilisateurs des messages d’erreur uniformes.
- Utiliser des sagas annulables pour de meilleures performances. Lorsque vous utilisez un composant React, il peut déclencher de nombreux appels d’API. Des situations de course et des appels d’interface de programmation inutiles peuvent résulter de ce déclenchement d’API. En annulant tous les appels d’API en cours lorsque vous effectuez une nouvelle demande, vous pouvez éviter cela.
- Utilisez les données les plus récentes. Lorsque vous effectuez plusieurs demandes d’API pour les mêmes données, il est essentiel de s’assurer qu’elles utilisent les données les plus récentes. L’utilisation de la fonction dernières Redux-Saga vous aide à atteindre cet objectif. L’effet garantit que vous utilisez les appels d’API les plus récents ou les plus récents et annule toutes les demandes d’API en attente pour les mêmes données.
- Utiliser un fichier séparé pour les sagas. Vous devriez garder les sagas séparées du fichier de stockage Redux. Ainsi, vos sagas seront plus faciles à contrôler et à tester.
Récupérer des données avec Redux-Saga
Redux-Saga offre une méthode fiable et flexible pour gérer les tâches asynchrones dans les applications React. En utilisant les sagas, vous pouvez créer un code plus robuste, testable et flexible qui sépare les préoccupations.
La récupération de données peut être une opération difficile et sujette aux erreurs, mais vous pouvez la simplifier avec l’aide de Redux-Saga. Redux-Saga améliore l’expérience utilisateur en vous permettant de gérer de manière fiable et prévisible de nombreux processus asynchrones.
En raison de ses nombreux avantages et fonctionnalités, Redux-Saga est un ajout fantastique à votre collection d’outils de développement React.