Действия должны быть простыми объектами. Используйте настраиваемое промежуточное ПО для асинхронных действий. redux-thunk, связанный

Я новичок в сокращении. Я использую redux-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
})

Спасибо за вашу помощь.


person Seunghun Sunmoon Lee    schedule 25.11.2017    source источник
comment
async возвращает обещание. Если у вас нет веских причин для использования async, просто верните функцию. В функции вы выполняете асинхронное действие, а затем отправляете действие. Проблема здесь в том, что вы не возвращаете функцию   -  person simbathesailor    schedule 25.11.2017


Ответы (1)


Проблема здесь в том, что вы используете async:

export const sendPaypalOrderToFirebase = (orderInfo) => {
  async (dispatch, getState) => {
    // ...
  }
}

На самом деле этот фрагмент создает асинхронную стрелочную функцию, которая никогда не вызывается, поскольку не возвращается от создателя действия (вызов этого создателя действия просто вернет undefined).

Исправить это можно одним из следующих способов:

  1. Добавление в return:

    export const sendPaypalOrderToFirebase = (orderInfo) => {
      return async (dispatch, getState) => {
        // ...
      }
    }
    
  2. Или снятие фигурных скобок:

    export const sendPaypalOrderToFirebase = (orderInfo) => async (dispatch, getState) => {
        // ...
    }
    

Наконец, стоит подумать, действительно ли вам здесь нужна async функциональность, поскольку вы, похоже, не создаете Promise (или, по крайней мере, awaiting) в блоке преобразователя.

person Michael Peyper    schedule 26.11.2017