Redux无法读取未定义的属性“有效负载”

时间:2017-01-21 20:59:29

标签: javascript reactjs redux

我正在使用Redux& amp;反应。尽管成功地提取数据并将其应用于州,但它仍然存在错误。

“未捕获的TypeError:无法读取未定义的属性'有效负载'”。这发生在控制台中的FETCH_PRODUCT_LISTINGS_PENDING操作类型之后。

反应组件:

import React from 'react';
import { connect } from 'react-redux';
import store from '../../../store';

import * as ProductListingActions from '../actions/ProductListingActions';

@connect((store) => {
    return {
        productListing: store.productListing.products
    }
})

export default class ProductListingContainer extends React.Component {
    constructor(data) {
        super();
        this.props = data;
        this.props.dispatch(ProductListingActions.fetchProductListings());
    }
    render() {
        return <div></div>;
    }
}

减速机:

import CookieHandler from '../../../modules/CookieHandler';
const cookieHandler = new CookieHandler;

export default function reducer(
    state = {
        products: [],
        fetching: false,
        fetched: false,
        error: null
    }, action) {

    switch(action.type) {
        case "FETCH_PRODUCT_LISTINGS_PENDING":
            return {
                ...state,
                fetching: true,
            }
            break;
        case "FETCH_PRODUCT_LISTINGS_REJECTED":
            return {
                ...state,
                fetching: false,
                error: action.payload
            }
            break;
        case "FETCH_PRODUCT_LISTINGS_FULFILLED":
            return {
                ...state,
                fetching: false,
                fetched: true,
                products: action.payload.data.default
            }
            break;
    }

    return state;
}

操作

import Config from '../../../Config.js';
import store from '../../../store.js';
import axios from 'axios';

export function fetchProductListings() {
    store.dispatch({
        type: "FETCH_PRODUCT_LISTINGS",
        payload: axios.get(Config.getConfigAPIUrl() + '/cartel/products')
    })

}

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

您正在调度调度,而不是调度对象。

this.props.dispatch(ProductListingActions.fetchProductListings());

function fetchProductListings() {
  store.dispatch({
    type: "FETCH_PRODUCT_LISTINGS",
    payload: axios.get(Config.getConfigAPIUrl() + '/cartel/products')
  })
}

如果你内联这个:

this.props.dispatch(
  store.dispatch({
    type: "FETCH_PRODUCT_LISTINGS",
    payload: axios.get(Config.getConfigAPIUrl() + '/cartel/products')
  })
)

你的动作创建者不应该调用dispatch,它应该只返回一个动作:

export function fetchProductListings() {
  return {
    type: "FETCH_PRODUCT_LISTINGS",
    payload: axios.get(Config.getConfigAPIUrl() + '/cartel/products')
  }
}

请注意,axios.get是异步的,因此payload将是承诺。您可能需要考虑添加redux-thunk来处理履行承诺。

答案 1 :(得分:0)

除非您提供更多信息,否则唯一会导致信息action.payload未被定义的信息。也许是action.payLoad?仔细检查API返回的内容,确保它确实是action.payload