操作必须是普通对象。使用自定义中间件进行异步操作。还原thunk相关
问题描述:
我是一个redux初学者。我正在使用redux-thunk,但是,我只是从这个函数得到错误。操作必须是普通对象。使用自定义中间件进行异步操作。还原thunk相关
Error: Actions must be plain objects. Use custom middleware for async actions.
this.props.sendPaypalOrderToFirebase(body)
export const sendPaypalOrderToFirebase = (orderInfo) => {
async (dispatch, getState) => {
database.ref('paypalOrders/' + uuid()).set({
orderInfo
});
return dispatch(paypalOrderFirebaseSuccess(orderInfo))
}
}
export const createOrder = (paymentMethod, paymentData) => ({
type: actionTypes.CREATE_ORDER,
paymentMethod,
paymentData
});
export const paypalOrderFirebaseSuccess = (orderInfo) => ({
type: actionTypes.PAYPAL_ORDER_FIREBASE_SUCCESS,
orderInfo
})
感谢您的帮助。
答
这里的问题是你的async
使用:
export const sendPaypalOrderToFirebase = (orderInfo) => {
async (dispatch, getState) => {
// ...
}
}
什么这个片段实际上做的是创造一个异步箭头的功能,因为它没有从行动的创建者返回不会被调用(调用此动作创建者将只返回undefined
)。
修复它可以通过以下方式实现:
-
添加在
return
:export const sendPaypalOrderToFirebase = (orderInfo) => { return async (dispatch, getState) => { // ... } }
-
或删除一些括号:
export const sendPaypalOrderToFirebase = (orderInfo) => async (dispatch, getState) => { // ... }
最后,它是值得考虑如果您实际上完全需要async
功能,因为您似乎没有在thunk块中创建Promise
(或至少await
ing)。
异步返回承诺。如果你没有足够的理由使用异步只是返回函数。在该函数中,您执行异步操作,然后调度该操作。这里的问题是你没有返回一个函数 – stack26