Redux Saga получает функцию, а не объект как действие - PullRequest
0 голосов
/ 10 мая 2019

Я нахожусь в процессе преобразования части моего кода в использование redux-saga (раньше у меня был только redux-thunk, но теперь я запускаю их оба рядом), и я использовал этот пример в качестве основы .

Единственная проблема, с которой я столкнулся, заключается в использовании следующей функции в качестве аргумента для takeEvery, иногда она работает как положено, но иногда прерывается, потому что она получает функцию, а не объект действия.

const requestAction = action => action.type.includes('REQUEST');

function* watchAuthenticationStatus() {
  yield takeEvery(requestAction, ensureAuthenticated);
}

Регистрация действия изнутри requestAction показывает мне, что мои действия становятся частью объектов, как и ожидалось, например,

{ type: "data/FETCH_REQUEST", data: Array(1) }

Однако я также вижу много вещей такого типа:

ƒ (_x) {
  return _ref.apply(this, arguments);
}

ƒ (_x2, _x3) {
  return _ref3.apply(this, arguments);
}

Я обошел это пока, проверив, существует ли action.type, но может ли кто-нибудь объяснить, почему я иногда вижу эти анонимные функции?

EDIT

Как указано ниже, я проверил порядок промежуточного программного обеспечения, у меня изначально было:

const sagaMiddleware = createSagaMiddleware();

const store = createStore(
  rootReducer,
  composeEnhancers(applyMiddleware(sagaMiddleware, thunk))
);

sagaMiddleware.run(rootSaga);

Переупорядочивание саги и thunk на следующее решило мою проблему:

composeEnhancers(applyMiddleware(thunk, sagaMiddleware))

1 Ответ

0 голосов
/ 10 мая 2019

Переупорядочение промежуточного программного обеспечения исправило это, первоначально это выглядело так:

composeEnhancers(applyMiddleware(sagaMiddleware, thunk))

Размещение Thunk первым решило проблему:

composeEnhancers(applyMiddleware(thunk, sagaMiddleware))
...