Открийте какво представляват Sagas и как те могат да ви помогнат да пишете по-стабилен и гъвкав код.

React и Redux са популярни инструменти за уеб разработка за управление на състоянието и разработване на динамични потребителски интерфейси.

Достъпът до информация може да бъде труден и да отнеме много време, особено когато се работи с асинхронни събития. Redux-Saga, лесен за използване междинен пакет, който управлява асинхронни дейности, може да опрости този процес.

Научете как React да създаде приложение, което извлича данни от Redux-Saga.

Разбиране на Redux-Saga

Redux-Saga е междинен пакет, който улеснява управлението и тестването на странични ефекти като достъп до хранилището на браузъра и асинхронни API заявки. Използването на генераторни функции прави асинхронния код да изглежда синхронен, което улеснява разсъжденията и отстраняването на грешки.

Redux-Saga работи, като търси конкретни Redux действия и задейства Sagas, които са функции за генериране на странични ефекти. Sagas може да изпълнява асинхронни операции, като например получаване на данни от API, и след това да изпрати ново Redux действие за актуализиране на състоянието.

instagram viewer

Вземете примера с използването на Redux-Saga за управление на асинхронни API извиквания. Започнете със създаване на Redux действие, което инициира процедурата за събиране на данни:

износконст FETCH_DATA = „FETCH_DATA“;

износконст fetchData = (параметри) => ({
тип: FETCH_DATA,
полезен товар: параметри,
});

Полезният товар на действието, FETCH_DATA, включва всички основни параметри, като крайната точка на API и параметрите на заявката.

След това дефинирайте Saga, която слуша за дейността FETCH_DATA и извършва събирането на данни:

импортиране { call, put, takeLatest } от„redux-saga/effects“;
импортиране аксиос от"аксиос";

износфункция* fetchDataSaga(действие) {
опитвам {
конст отговор = добив повикване (axios.get, action.payload.endpoint, {
параметри: action.payload.params,
});

добив слагам({ Тип: „FETCH_DATA_SUCCESS“, полезен товар: response.data });
} улов (грешка) {
добив слагам({ Тип: „FETCH_DATA_ERROR“, полезен товар: грешка });
}
}

износфункция* watchFetchData() {
добив takeLatest (FETCH_DATA, fetchDataSaga);
}

Тази сага прави извикване на API към аксиос библиотека с помощта на обадете се ефект. След това изпраща извлечените данни като нов полезен товар за действие Redux с типа FETCH_DATA_SUCCESS. Ако възникне грешка, той изпраща ново действие Redux с обекта за грешка като полезен товар и тип FETCH_DATA_ERROR.

И накрая, трябва да регистрирате Saga в магазина Redux с помощта на мидълуера redux-saga:

импортиране { applyMiddleware, createStore } от'редукс';
импортиране createSagaMiddleware от„redux-сага“;
импортиране rootReducer от'./редуктори';

конст sagaMiddleware = createSagaMiddleware();
конст store = createStore (rootReducer, applyMiddleware (sagaMiddleware));
sagaMiddleware.run (watchFetchData);

Чрез регистриране на watchFetchData Сага с новия мидълуер на екземпляра, този код създава друг редукс-сага. Мидълуерът е настроен в магазина Redux с помощта на ApplyMiddleware.

Redux-Saga като цяло предоставя силен и многостранен подход за управление на асинхронни дейности в Redux на React приложения. Можете да рационализирате извличането на данни и да генерирате по-лесен код за тестване, поддържане и актуализиране, като използвате Sagas за контрол на грешки в кода.

Често срещани проблеми с извличането на данни в приложенията на React

Има няколко трудности, които разработчиците често срещат, докато използват извличането на данни от React. Ето няколко примера:

  1. Управление на асинхронни действия: Това е информация, предоставена от интерфейс за програмиране, който следи неедновременни операции, без да се намесва в потребителския интерфейс (UI). Работата с няколко API заявки или данни, които разчитат на други данни, може да направи това трудно.
  2. Обработване на грешки: извикванията на API може да се провалят и е жизненоважно да обработвате правилно тези грешки. Това включва предоставяне на съобщения за грешка на потребителя и позволяване на повторно подаване на заявката.
  3. Актуализиране на Redux store: Трябва да запазите информацията, получена от API в Redux store, така че други компоненти да имат достъп до нея. От решаващо значение е да актуализирате магазина, без да се намесвате или повреждате вече съществуващи данни.

Как да използвате Redux-Saga за извличане на данни в React

Използването на Redux-Saga за извличане на данни ви позволява да отделите логиката за извършване на API извиквания и работа с отговора от вашите React компоненти. В резултат на това можете да се съсредоточите върху изобразяването на данните и реагирането на потребителските взаимодействия, докато Sagas обработва асинхронно извличане на данни и управление на грешки.

Трябва да регистрирате watchFetchData Сага с Redux-Saga междинен софтуер за използване на Sagas в нашия магазин Redux:

// src/store.js
импортиране { createStore, applyMiddleware } от'редукс';
импортиране createSagaMiddleware от„redux-сага“;
импортиране rootReducer от'./редуктори';
импортиране { watchFetchData } от'./sagas/dataSaga';

конст sagaMiddleware = createSagaMiddleware();
конст store = createStore (rootReducer, applyMiddleware (sagaMiddleware));
sagaMiddleware.run (watchFetchData);

износпо подразбиране магазин;

Този код регистрира sagaMiddleware с магазина Redux с помощта на applyMiddleware функция и createSagaMiddleware метод на редукс-сага пакет. След това, използвайки тичам метод, той изпълнява watchFetchData Сага.

Вашата настройка на Redux-Saga е завършена, след като всеки компонент е на мястото си. Сагата използва fetchDataApi функция за извличане на данните, когато вашият React компонент изпрати действието FETCH_DATA_REQUEST. Ако планираното извличане на данни е успешно, то изпраща друга дейност с извлечените данни. Ако има грешка, той изпраща ново действие с обекта за грешка.

// src/components/DataComponent.js

импортиране Реагирайте, {useEffect} от"реагира";
импортиране {useDispatch, useSelector} от'react-redux';
импортиране {fetchDataRequest} от'../actions/dataActions';

конст DataComponent = () => {
конст изпращане = useDispatch();
конст { данни, isLoading, грешка } = useSelector((състояние) => състояние.данни);

useEffect(() => {
изпращане (fetchDataRequest({ param1: 'стойност1', параметър2: 'стойност2' }));
}, [изпращане]);

ако (isLoading) {
връщане<див>Зареждане...див>;
}

ако (грешка) {
връщане<див>Грешка: {error.message}див>;
}

връщане (


{data.map((вещ) => (
{item.name}</div>
))}
</div>
);
};

износпо подразбиране DataComponent;

В примера по-горе вие ​​използвате useSelector закачете вашия React компонент, за да получите данните, се зарежда, и грешка стойности от магазина Redux. Освен това изпращате действието FETCH_DATA_REQUEST, като използвате useEffect() кука когато компонентът се монтира. Вие изобразявате данните, съобщението за зареждане или съобщението за грешка в зависимост от данни стойности, се зарежда, и грешка.

Чрез използване на Redux-Saga за извличане на данни, управление на асинхронни API заявки в React приложение могат да бъдат значително рационализирани. Можете да създадете по-поддържаем и модулен код, като изолирате логиката на извикване на API от вашите компоненти и управлявате асинхронния поток в Sagas.

Най-добри практики за използване на Redux-Saga за извличане на данни

Следвайте тези най-добри практики, докато използвате Redux-Saga за извличане на данни:

  1. Използвайте отделни саги за всяка операция за извличане на данни. Препоръчително е да отделите Saga за всеки процес на извличане на данни, вместо да включвате цялата логика в една Saga. Поддържането и промяната на кода е по-лесно, тъй като можете веднага да намерите съответните саги за определени дейности.
  2. Използвайте вградената обработка на грешки на Redux-Saga. Можете да използвате блока try/catch на Redux-Saga за автоматично обработване на грешки. Това ни позволява да управляваме повреди централно и да предоставяме на потребителите еднообразни съобщения за грешки.
  3. Използвайте отменими саги за по-добро представяне. Когато използвате React компонент, той може да задейства много API извиквания. Състезателни ситуации и ненужни извиквания на програмен интерфейс може да са резултат от това задействане на API. Като отмените всички текущи извиквания на API, когато правите нова заявка, можете да предотвратите това.
  4. Използвайте най-актуалните данни. Когато правите няколко API заявки за едни и същи данни, е изключително важно да се гарантира, че те използват най-новите данни. Използвайки последен ефект, Redux-Saga ви помага да постигнете това. Ефектът гарантира, че използвате най-новите или най-новите API извиквания и отменя всички чакащи API заявки за същите данни.
  5. Използвайте отделен файл за саги. Трябва да съхранявате Sagas отделно от файла на магазина Redux. В резултат на това вашите саги ще бъдат по-лесни за контрол и тестване.

Извличане на данни с Redux-Saga

Redux-Saga предлага надежден и гъвкав метод за обработка на асинхронни задачи в React приложения. Използвайки Sagas, можете да създадете по-стабилен, тестван и гъвкав код, който разделя проблемите.

Извличането на данни може да бъде трудна и податлива на грешки операция, но можете да я опростите с помощта на Redux-Saga. Redux-Saga подобрява потребителското изживяване, като ви позволява да управлявате надеждно и предвидимо много асинхронни процеси.

Благодарение на многото си предимства и функции, Redux-Saga е фантастично допълнение към вашата колекция от инструменти за разработка на React.