Создатель действий не связан с редуксом - PullRequest
0 голосов
/ 13 июня 2019

Я использую промежуточное программное обеспечение redux-thunk (приложение RactNative).Мои создатели действий используются на нескольких экранах, где они отлично работают.Но недавно я добавил новый экран, который также использует тех создателей действий.Проблема в том, что когда я звоню им, они не возвращают Promise в отличие от других экранов.Я добавил .then обратный вызов создателю действия, который выдает ошибку, говорящую .then is not a function.

Вот мой экран:

import ... ;
import { connect } from "react-redux";
import {
  cancelAsync,
  acceptAsync
} from "../redux/actions";

function PreviewScreen(props) {
  const {
    ...
    acceptAsync,
    cancelAsync
  } = props;

  console.log(cancelAsync()); // returns function body: ƒ (dispatch, getState) { ...

  const accept = id => {
    acceptAsync(id).then(() => {...});
  };

  const cancel = id => {
    cancelAsync(id).then(() => {...});
  };

  return ...
}


const mapStateToProps = ... ;

const mapDispatchToProps = dispatch => {
  return {
    dispatch,
    cancelAsync,
    acceptAsync
  };
};

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(PreviewScreen);

И это мои создатели действия:

import axios from "axios";
import {
  acceptURL,
  cancelURL,
} from "../../constants";

export const acceptAsync = id => {
  return function(dispatch, getState) {
    const request = axios.post(
      acceptURL,
      { id },
      {
        headers: {
          Authorization: `Token ${token}`
        }
      }
    );

    request
      .then(response => {
        ...
        return response;
      })
      .catch(reason => {
        ...
        return reason;
      });

    return request;
  };
};

export const cancelAsync = (orderID, status) => {
  return function(dispatch, getState) {
    const request = axios.post(
      cancelURL,
      {},
      {
        headers: {
          Authorization: `Token ${token}`
        }
      }
    );

    request
      .then(({ data }) => {
        ...
        return data;
      })
      .catch(reason => {
        ...
        return reason;
      });

    return request;
  };
};

Чего мне не хватает?Это происходит только на этом экране.

Кусок кода с другого экрана, который работает правильно:

import {
  acceptOrderAsync,
  cancelOrderAsync,
  setNewOrdersAsync
} from "../redux/actions";

function NewOrdersScreen(props) {
  const {
    ...
    setNewOrdersAsync,
    acceptOrderAsync,
    cancelOrderAsync,
    navigation
  } = props;

  ...
}

const mapStateToProps = ({ newOrders }) => ({ ...newOrders });

export default connect(
  mapStateToProps,
  { acceptOrderAsync, cancelOrderAsync, setNewOrdersAsync }
)(NewOrdersScreen);
...