#javascript #redux #middleware #react-redux
#javascript #redux #промежуточное программное обеспечение #реагировать-redux
Вопрос:
У меня есть приложение react / redux, которое работает следующим образом
- Пользователь переходит к host.com/id
- Корневое приложение получает идентификатор и отправляет
LOAD_USER_DETAILS_START
действие с идентификатором. Это вернет идентификаторы пользователя, необходимые для других сторонних сервисов. - Промежуточное программное обеспечение улавливает это сообщение и выполняет асинхронный вызов нашего API с обратным вызовом для отправки
LOAD_USER_DETAILS_COMPLETE
сообщения по завершении вызова. - Промежуточное программное обеспечение улавливает
LOAD_USER_DETAILS_COMPLETE
и запускает несколько асинхронных вызовов сторонних API с этими новыми данными.
Моя проблема в том, что на шаге 4 у меня есть только LOAD_USERS_DETAILS_COMPLETE
действие и его полезная нагрузка. Мне нужно другое состояние приложения (фильтры, такие как время начала и окончания).
В настоящее время я справляюсь с этим, используя store.getState()
, поскольку оно доступно через подпись промежуточного программного обеспечения:
const asyncMiddlewareThing = store => next => action => {
next(action);
switch( action.type){
case LOAD_USERS_DETAILS_COMPLETE:
let { start, end } = store.getState().contactsFilter.timeframe;
return store.dispatch(
createFetchContactsStartMessage(action.payload.zuid, start, end)
);
};
Это заставляет меня чувствовать, что я нарушаю поток информации redux. Я? Я спрашиваю, потому что вижу несколько ситуаций, когда мне нужно будет это сделать.
Комментарии:
1. Совершенно нормально получить доступ к состоянию через
getState
. Однако вы можете счесть более чистым просто передавать необходимую информацию в вашемaction
.
Ответ №1:
Вместо этого я бы использовал redux-thunk. У него есть возможность получить состояние в предоставленной функции.