动作必须是普通对象。使用自定义中间件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动作必须是普通对象。使用自定义中间件相关的知识,希望对你有一定的参考价值。

会出现什么问题?

未捕获的错误:操作必须是普通对象。使用自定义中间件进行异步操作。

配置商店:

export default configureStore = () => {
  let store = compose(applyMiddleware(ReduxThunk))(createStore)(reducers);
  return store;
}

行动

export const menulist = async ({ navigation  }) => {
  return async dispatch => {
    try {
        dispatch({ type: types.MENULIST_REQUEST_START })
        let response = await menuListByCategories();
        dispatch({ type: types.MENULIST_SUCCESS })
    } catch (error) {
        dispatch({ type: types.MENULIST_FAILED })
    }
  }
}
答案

你用错了方法,

在Redux中,每个动作都必须返回一个对象,这是必须的!所以,你的调度,这是一个函数,应该这样调用。

除此之外,您只需要声明异步返回dispatch的函数。 async关键字确定以下函数将返回promise。当你的第一个函数(menulist)返回第二个函数(dispatch one)返回的promise时,你不必指定它。

export const menulist = ({ navigation  }) => async (dispatch) => {
    try {
        dispatch({ type: types.MENULIST_REQUEST_START })
        let response = await menuListByCategories();

        dispatch({ type: types.MENULIST_SUCCESS })
    } catch (error) {
        dispatch({ type: types.MENULIST_FAILED })
    }
  }
}

以上是关于动作必须是普通对象。使用自定义中间件的主要内容,如果未能解决你的问题,请参考以下文章

Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象

动作必须是普通对象。使用自定义中间件进行异步操作/未定义不是对象/使用 navigator.geolocation 出现错误

Redux 错误操作必须是普通对象。使用自定义中间件进行异步操作

React Redux - 动作必须是普通对象。使用自定义中间件进行异步操作

如何修复'动作必须是普通对象。使用自定义中间件进行异步操作。

redux-thunk:错误:动作必须是普通对象。使用自定义中间件进行异步操作