Узнайте, что такое саги и как они могут помочь вам в написании более надежного и гибкого кода.

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';

экспортконстанта выборка данных = (параметры) => ({
тип: FETCH_DATA,
полезная нагрузка: параметры,
});

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

Затем определите Saga, которая прослушивает активность FETCH_DATA и выполняет сбор данных:

Импортировать { зови, ставь, бери последнее} от'редукс-сага/эффекты';
Импортировать аксиомы отаксиос;

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

урожай помещать({ тип: 'FETCH_DATA_SUCCESS', полезная нагрузка: ответ.данные });
} ловить (ошибка) {
урожай помещать({ тип: "FETCH_DATA_ERROR", полезная нагрузка: ошибка });
}
}

экспортфункция* смотретьFetchData() {
урожай взять последний (FETCH_DATA, fetchDataSaga);
}

Эта сага делает вызов API к аксиомы библиотека, использующая вызов эффект. Затем он отправляет полученные данные в качестве новой полезной нагрузки действия Redux с типом FETCH_DATA_SUCCESS. Если возникает ошибка, он отправляет новое действие Redux с объектом ошибки в качестве полезной нагрузки и типом FETCH_DATA_ERROR.

Наконец, вам нужно зарегистрировать Saga в магазине Redux с помощью промежуточного программного обеспечения redux-saga:

Импортировать { применить ПО промежуточного слоя, создать магазин } от«редукс»;
Импортировать создатьSagaMiddleware от'редукс-сага';
Импортировать rootReducer от'./редукторы';

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

Зарегистрировав смотретьFetchData Saga с промежуточным программным обеспечением нового экземпляра, этот код создает еще один редукс-сага. Промежуточное программное обеспечение устанавливается в магазине Redux с использованием Применить промежуточное ПО.

Redux-Saga, в целом, обеспечивает надежный и универсальный подход к управлению асинхронными действиями внутри Редукс React Приложения. Вы можете упростить выборку данных и создать более простой код для тестирования, обслуживания и обновления, используя Sagas для контроля ошибок кода.

Распространенные проблемы с получением данных в приложениях React

Есть несколько трудностей, с которыми разработчики часто сталкиваются при использовании выборки данных React. Вот несколько примеров:

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

Как использовать Redux-Saga для выборки данных в React

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

Вам необходимо зарегистрировать смотретьFetchData Сага с Редукс-Сага промежуточное ПО для использования Sagas в нашем магазине Redux:

// источник/store.js
Импортировать { createStore, применить промежуточное ПО } от«редукс»;
Импортировать создатьSagaMiddleware от'редукс-сага';
Импортировать rootReducer от'./редукторы';
Импортировать { смотретьFetchData } от'./саги/dataSaga';

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

экспортпо умолчанию магазин;

Этот код регистрирует сагаПромежуточное ПО с магазином Redux, используя применить ПО промежуточного слоя функции и создатьSagaMiddleware метод редукс-сага упаковка. Затем с помощью бегать метод, он выполняет смотретьFetchData Сага.

Ваша установка Redux-Saga завершена, теперь каждый компонент на своем месте. Сага использует fetchDataApi для получения данных, когда ваш компонент React отправляет действие FETCH_DATA_REQUEST. Если запланированная выборка данных прошла успешно, она отправляет другое действие с извлеченными данными. Если есть ошибка, он отправляет новое действие с объектом ошибки.

// источник/компоненты/DataComponent.js

Импортировать Реагируйте, {useEffect} от«реагировать»;
Импортировать { useDispatch, useSelector } от'реагировать-редукс';
Импортировать { fetchDataRequest } от'../действия/данныеДействия';

константа Компонент Данных = () => {
константа диспетчеризация = использованиеDispatch();
константа {данные, isLoading, ошибка} = useSelector((состояние) => состояние.данные);

использоватьЭффект(() => {
отправка (fetchDataRequest({ параметр1: 'значение1', параметр2: 'значение2' }));
}, [отправлять]);

если (загружается) {
возвращаться<див>Загрузка...див>;
}

если (ошибка) {
возвращаться<див>Ошибка: {ошибка.сообщение}див>;
}

возвращаться (


{данные.карта((элемент) => (
{элемент.название}</div>
))}
</div>
);
};

экспортпо умолчанию Компонент Данных;

В приведенном выше примере вы используете использованиеселектор подключить ваш компонент React, чтобы получить данные, isLoading, и ошибка значения из магазина Redux. Вы дополнительно отправляете действие FETCH_DATA_REQUEST, используя метод хук useEffect() когда компонент монтируется. Вы визуализируете данные, сообщение о загрузке или сообщение об ошибке в зависимости от данные ценности, isLoading, и ошибка.

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

Лучшие практики использования Redux-Saga для выборки данных

Следуйте этим рекомендациям при использовании Redux-Saga для выборки данных:

  1. Используйте отдельные саги для каждой операции выборки данных. Рекомендуется разделить сагу для каждого процесса выборки данных, а не включать всю логику в одну сагу. Поддерживать и изменять код стало проще, поскольку вы можете сразу найти соответствующие саги для определенных действий.
  2. Используйте встроенную обработку ошибок Redux-Saga. Вы можете использовать блок try/catch Redux-Saga для автоматической обработки ошибок. Это позволяет нам централизованно управлять сбоями и предоставлять пользователям унифицированные сообщения об ошибках.
  3. Используйте отменяемые саги для повышения производительности. Когда вы используете компонент React, он может инициировать множество вызовов API. Этот триггер API может привести к ситуациям гонки и ненужным вызовам интерфейса программирования. Отменив любые текущие вызовы API при создании нового запроса, вы можете предотвратить это.
  4. Используйте самые свежие данные. При выполнении нескольких запросов API для одних и тех же данных крайне важно убедиться, что они используют самые последние данные. Используя последний эффект, Redux-Saga поможет вам достичь этого. Эффект гарантирует, что вы используете самые последние или самые последние вызовы API, и отменяет все ожидающие запросы API для тех же данных.
  5. Используйте отдельный файл для саг. Вы должны хранить саги отдельно от файла хранилища Redux. В результате ваши саги будет легче контролировать и тестировать.

Получение данных с помощью Redux-Saga

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

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

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