为什么我的redux定制中间件需要在操作时返回调度?

时间:2019-07-08 08:33:38

标签: javascript redux react-redux redux-thunk

我将设置redux自定义中间件,并更改操作以在操作中插入参数。但是结果是actions must be plain objects. use custom middleware for async actions,因为实际上我没有return dispatch(myAction)

我的配置中间件

const injectMiddleware = ({dispatch, getState}) => next => action => {

//skipped all my logic

return(
  typeof action === 'function' ?
    next(action({dispatch, getState, ...anotherCustomFunction}))
    :
    next(action)
)
}

我的动作

export const setUserSessionToken = () => ({dispatch}: Store) => {
  dispatch(setToken)
}

并得到错误 actions must be plain objects. use custom middleware for async actions

return固定

export const setUserSessionToken = () => ({dispatch}: Store) => {
  return dispatch(setToken)
}

no error,如果没有使用自定义中间件,则不包含return

export const setUserSessionToken = () => (dispatch) => {
  dispatch(setToken)
}

或在自定义中间件中只是

return next(action)

1 个答案:

答案 0 :(得分:0)

更改此

next(action({dispatch, getState, ...anotherCustomFunction}))

action({dispatch, getState, ...anotherCustomFunction})

下一步调用是将操作对象传递给下一个中间件。当然,您可以传递一个尚未求值的函数,但最终将需要另一个像thunk这样的中间件来处理该函数。