Я пишу специальное промежуточное программное обеспечение, которое должно отправлять действия thunk. Проблема в том, что промежуточное ПО вызывается после redux-thunk
в цепочке промежуточного программного обеспечения, поэтому я получаю ошибку Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.
при использовании предоставленного dispatch
.Пользовательское промежуточное ПО Redux - отправка в начало сети промежуточного программного обеспечения?
export default function createMiddleware() {
return ({dispatch, getState}) => next => (action) => {
if(action.type !== 'FOO') {
return next(action);
}
dispatch(thunkActionHere); // this is the issue
}
}
Я хотел бы направить этот стук действие назад к началу промежуточного слоя цепи, так что перевождь-преобразователь может обрабатывать его. Это возможно?
обновление:
function createMiddleware(extraArgument) {
return function ({dispatch, getState}) {
return function (next) {
return function (action) {
switch (action.type) {
case 'FOO1':
dispatch({type: 'NORMAL_ACTION'}); // works fine
break;
case 'FOO2':
dispatch(function() {
return (dispatch, getState) => { // Error: Actions must be plain objects. Use custom middleware for async actions.
console.log('inside the thunk');
};
});
break;
default:
return next(action);
}
};
};
};
}
const middleware = createMiddleware();
middleware.withExtraArgument = createMiddleware;
export default middleware;
Вот моя конфигурация магазина:
export default function configureStore(initialState) {
const store = createStore(rootReducer, initialState, compose(
// Add other middleware on this line...
applyMiddleware(bugsnagErrorCatcherMiddleware()),
applyMiddleware(thunk.withExtraArgument({APIFactory, PusherManager})),
applyMiddleware(webrtcVideoMiddleware.withExtraArgument(PusherManager)), // this is the middleware above
applyMiddleware(bugsnagbreadcrumbLoggerMiddleware()),
)
);
return store;
}
Я не могу поставить свои промежуточный программное обеспечение, прежде чем Redux-стук, потому что тогда он не получает действия, санки отправки.
Оказывается, проблема была в моей конфигурации магазина. Эта проблема вызвала использование 'compose' от redux. –
Можете ли вы добавить его в качестве другого ответа? Это интересно. –
уверенный вещь, только сделал –