Действие асинхронного промежуточного программного обеспечения Redux не имеет необходимого состояния для вызова api

#javascript #redux #middleware #react-redux

#javascript #redux #промежуточное программное обеспечение #реагировать-redux

Вопрос:

У меня есть приложение react / redux, которое работает следующим образом

  1. Пользователь переходит к host.com/id
  2. Корневое приложение получает идентификатор и отправляет LOAD_USER_DETAILS_START действие с идентификатором. Это вернет идентификаторы пользователя, необходимые для других сторонних сервисов.
  3. Промежуточное программное обеспечение улавливает это сообщение и выполняет асинхронный вызов нашего API с обратным вызовом для отправки LOAD_USER_DETAILS_COMPLETE сообщения по завершении вызова.
  4. Промежуточное программное обеспечение улавливает 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. У него есть возможность получить состояние в предоставленной функции.