Главная страница
Last updated
Last updated
redux-saga
— это библиотека, которая призвана упростить и улучшить побочные эффекты (т.е. такие действия, как асинхронные операции, например, загрузки данных, и "грязные" действия, такие, как доступ к браузерному кешу), сделать лёгкими в тестировании и лучше справляться с ошибками.
Можно представить это так, что saga — это как отдельный поток в вашем приложении, который отвечает за побочные эффекты. redux-saga
— это мидлвар redux, что означает, что этот поток может запускаться, останавливаться и отменяться из основного приложения с помощью обычных действий redux, оно имеет доступ к полному состоянию redux приложения и также может диспатчить действия redux.
Библиотека использует концепцию ES6, под названием генераторы, для того, чтобы сделать эти асинхронные потоки легкими для чтения, написания и тестирования. (если вы не знакомы с этим, здесь есть некоторые ссылки для ознакомления) Тем самым, эти асинхронные потоки выглядят, как ваш стандартный синхронный JavaScript-код. (наподобие async
/await
, но генераторы имеют несколько отличных возможностей, необходимых нам)
Возможно, вы уже использовали redux-thunk
, перед тем как обрабатывать ваши выборки данных. В отличие от redux thunk, вы не оказываетесь в аду колбэков, вы можете легко тестировать ваши асинхронные потоки и ваши действия остаются чистыми.
или
Альтернативно, вы можете использовать предоставленные UMD сборки напрямую в <script>
на HTML странице. Смотрите эту секцию.
Предположим, что у нас есть интерфейс для извлечения некоторых пользовательских данных с удалённого сервера при нажатии кнопки. (Для краткости, мы просто покажем код запуска экшена.)
Компонент диспатчит действие в виде простого объекта в хранилище. Мы создадим saga, которая слушает все действия USER_FETCH_REQUESTED
и генерирует вызовы API для извлечения пользовательских данных.
sagas.js
Для запуска Saga, мы подключим ее к Redux Store, используя мидлвар redux-saga
.
main.js
Также существует сборка umd redux-saga
, доступная в каталоге dist/
. При использовании umd-сборки, redux-saga
доступна как ReduxSaga
в объекте window
.
версия umd полезна, если вы не используете Webpack или Browserify. Вы можете получить доступ к ней, непосредственно из unpkg.
Доступны следующие сборки:
Важно! Если ваш целевой браузер не поддерживает генераторы ES2015, вам нужно транспилировать код (например, через babel plugin) и предоставить корректный runtime, такой, например, как этот. Runtime нужно импортировать до redux-saga:
Ниже приведены примеры, портированные (пока) из репозиториев Redux.
Есть три примера счётчика.
counter-vanilla
Демо, использующее обычный JavaScript и UMD-сборки. Все исходники находятся в index.html
.
Для запуска примера, просто откройте index.html
в браузере.
Важно: ваш браузер должен поддерживать генераторы. Подойдут последние версии Chrome/Firefox/Edge.
counter
Демо, использующее webpack
и высокоуровневое API takeEvery
.
cancellable-counter
Демо, использующее низкоуровневое API для демонстрации отмены задачи.
Redux-Saga с TypeScript требует DOM.Iterable
или ES2015.Iterable
. Если ваш target
это ES6
, у вас, скорее всего, уже всё настроено, однако для ES5
вам потребуется самостоятельно добавить его. Посмотрите файл tsconfig.json
и официальную документацию с опциями компилятора.
Вы можете найти официальный логотип Redux-Saga с различными вариантами в каталоге logo.
Поддержите нас ежемесячными пожертвованиями и помогите нам продолжать нашу деятельность. [Стать меценатом]
Стань спонсором и получи свой логотип в нашем README на GitHub с ссылкой на ваш сайт. [Стать спонсором]