Пустой массив внутри объекта карты действий Redux - PullRequest
2 голосов
/ 08 июля 2019

Я получаю объект из действия (используя axios) и использую функцию карты для его итерации.

Мне также нужно получить другое действие, но внутри сопоставленного родительского объекта. Я вижу, что запрос / ответ в порядке (с возвращенными данными), но переменная-редуктор все еще становится пустой.

1: компонент получает данные

componentDidMount() {
        const { match: { params } } = this.props;
        this.props.getSaleDetails(params.order_id);
      }

2: определение mapStateToProps и mapDispatchToProps

const mapStateToPropos = state => ({
    saleDetails: state.salesOrders.saleDetails,
    saleDetailFurthers: state.salesOrders.saleDetailFurthers
   });

const mapDispatchToProps = dispatch =>
  bindActionCreators({ getSaleDetails, getDetailFurthers }, dispatch);

3: создание конста из реквизита редукса

const detailsArray = saleDetails.data;

4: итерация массива с помощью функции карты

// getDetailFurthers is another action, getting data by passing "detail_id" and updating "saleDetailFurthers" props

{detailsArray && detailsArray.map((item) => {
                    const {getDetailFurthers, saleDetailFurthers} = this.props;
                    getDetailFurthers(item.detail_id)
                    console.log(saleDetailFurthers)
// empty array????
                    count++;
                    return (
                        <Paper className={classes.paper} key={item.detail_id}>
// ... next code lines

5: Действия

export function getDetailFurthers(detail_id){
    return async dispatch => { 
        const request =  await axios.get(`${BASE_URL}/salesorders/detail/furthers/${detail_id}`)
        return {
            type: "SALE_DETAIL_FURTHERS_FETCHED", 
            payload: request
        }
    }
}

6: Редукторы

const INITIAL_STATE = {
  //... others
  saleDetailFurthers: []
};

export default (state = INITIAL_STATE, action) => {
  switch (action.type) {
    ///... other cases
    case "SALE_DETAIL_FURTHERS_FETCHED":
      return { ...state, saleDetailFurthers: action.payload }
    default:
      return state
  }
};

Я ожидаю, что const "saleDetailFutures" будет загружен данными от действия приведения.

1 Ответ

0 голосов
/ 09 июля 2019

Вам нужно использовать диспетчер вместо возврата, например:

dispatch({
  type: "SALE_DETAIL_FURTHERS_FETCHED", 
  payload: request
});
...