2017-01-16 10 views
2

В моем приложении React я использую API с длинным опросом. Чтобы автоматически отправлять запросы на каждый ответ, я использую промежуточное программное обеспечение. Но перед отправкой нового запроса я должен сохранить полученные данные в магазине. Более того, я хочу отправить другое действие внутри моего промежуточного программного обеспечения. Так что моя структура выглядит следующим образом:Получить состояние и сделать отправку из промежуточного программного обеспечения

InitLongPoll() -> SendRequest (данные) -> ReceiveResponse (данные) * -> SendRequest (данные)

'*' мой промежуточного слоя. Оттуда я сохраняю данные в магазине, используя store.dispatch(responseData) и отправляя новый запрос, используя store.dispatch(sendRequest(authData)).

Можно ли получить этот authData с помощью store.getState().authReducer? Насколько я знаю, мое промежуточное ПО должно быть чистой функцией и не должно зависеть от внешних данных (хранилища). Заранее спасибо.

ответ

3

Можно ли получить этот authData с помощью store.getState(). AuthReducer? Насколько я знаю, мое промежуточное программное обеспечение должно быть чистой функцией и не должно зависеть от внешних данных (хранилища).

Да, это так. Среднее ПО - это способ введения побочных эффектов в цикл редукта, и он не может быть чистой функцией. У вашего собственного промежуточного программного обеспечения есть побочный эффект - опрос сервера.

A перевождь промежуточного слоя является анти-тезис о чистой функции, которая определяется как:

  1. Функция всегда оценивает то же значение результата придано одинаковое значение (ы) аргумент. Значение результата функции не может зависеть от любой скрытой информации или состояния , которые могут меняться при выполнении программы , или между различными исполнениями программы, а также не может зависеть от любого внешнего входа от устройств ввода/вывода (обычно см. Ниже).
  2. Оценка результата не вызывает каких-либо семантически наблюдаемых побочных эффектов или результатов, таких как мутация изменяемых объектов или выход устройствам ввода-вывода (обычно см. Ниже).

Вы также можете увидеть в redux-thunk исходном коде, что он использует getState:

function createThunkMiddleware(extraArgument) { 
    return ({ dispatch, getState }) => next => action => { 
    if (typeof action === 'function') { 
     return action(dispatch, getState, extraArgument); 
    } 

    return next(action); 
    }; 
}