【问题标题】:Actions must be plain objects error using Redux Thunk操作必须是使用 Redux Thunk 的普通对象错误
【发布时间】:2018-12-23 04:11:50
【问题描述】:

我在使用 redux-thunk 时遇到以下错误。我被困了好几天,我在堆栈溢出中找到了很多关于这个问题的答案,但没有一个有帮助。抱歉,这可能是一个愚蠢的问题。任何帮助将不胜感激。非常感谢

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

Store.js:

import { createStore, applyMiddleware } from 'redux'
import ReduxThunk from 'redux-thunk'
import reducer from './reducers'

const store = createStore(reducer, {}, applyMiddleware(ReduxThunk))
export default store

我的行动:

export const getAllClientList = () => async (dispatch) => {
 try {
  let clientList = await axios.get(API_URL)
    dispatch({ type: types.RECEIVE_CLIENTLIST, clientList })
  } catch (e) {
    dispatch({ type: types.ERROR, message: e.message })
  }
}

【问题讨论】:

    标签: reactjs redux async-await react-redux redux-thunk


    【解决方案1】:

    我认为动作创建者必须是同步动作。但是,如果您需要使用异步逻辑进行调度和操作,则必须使用一些中间件,例如 redux-thunk 或 redux-promise-middleware。使用后者,您可以创建类似的操作

    const getAllClientList = () => ({
      type: types.RECEIVE_CLIENTLIST,
      payload: axios.get(API_URL).then(() => {....}),
    })
    

    【讨论】:

      【解决方案2】:

      您是否尝试将 clientList 分配给操作的属性? 例如一个有效载荷:

      { 类型:types.RECEIVE_CLIENTLIST,有效负载:clientList }

      【讨论】:

      • 你好,菲尔。感谢您的评论。我试图分配给动作的属性clientList,并且在我的reducer中我将属性作为action.clientList。叹。在被困了几天之后,我感到非常绝望。 :(
      • 这并不能确定您的代码有什么问题(可能需要查看更多),但我创建了一个似乎可以在代码和框中工作的版本:codesandbox.io/s/kmq07z6o1r
      • 嗨菲尔。你今天过得怎么样?只是想让你更新我的问题~我发现这个错误与 redux-thunk 无关。这是由我使用的前端框架引起的(由于某些原因 redux-thunk 不适用于商店)。无论如何,谢谢你的帮助。祝你一切顺利:) !!
      • 嗨,弗雷德莫。非常感谢您的更新,很高兴您找到了解决方案。!
      猜你喜欢
      • 2023-03-14
      • 2017-11-28
      • 2020-06-13
      • 2018-03-23
      • 1970-01-01
      • 2018-07-08
      • 2019-11-11
      • 2017-10-25
      相关资源
      最近更新 更多