Да, вы можете использовать генераторы ES6 + в качестве создателей действий. Возможно, вам больше не понадобится redux-thunk.
использование
Чем могут помочь генераторы? Вы можете создавать объекты действия для их отправки! Без упаковки каждый раз с dispatch
:
Когда вы вызываете генератор, его тело не выполняется, но вместо него возвращается объект iterator. Обычно создатели действий заключаются в dispatch
вызов, поэтому итератор будет отправлен в магазин. Для обработки итераторов потребуется некоторое промежуточное программное обеспечение redux. Вот:
Это промежуточное ПО обрабатывает «следующие» объекты. Он вызывает метод next()
итератора, и тело функции генератора выполняется шаг за шагом. Генератор выдает действия, и они отправляются в магазин.
Как можно получить государство? yield
всегда возвращает новое состояние. Вы ничего не можете дать (undefined
), если просто хотите получить текущее состояние (ничего не будет отправлено):
// Inside generator: let state = yield; or const params = getParamsFromState(yield); // yield expression
Вы также можете return
некоторые данные из генератора и получить их с помощью .then:
signIn().then(username => { console.log(username); });
Дальнейший рефакторинг
Более того, если вы используете эту библиотеку: redux-action-creators
… Вы можете избавиться от констант типов и дополнительных действий, чтобы определить создателя действия в одном блоке кода:
Он своего рода «генерирует» подтипы для создателей ваших действий и является очень удобным инструментом.
Удачи с Redux!