首页 文章

Redux无法读取未定义的属性'payload'

提问于
浏览
0

我正在使用Redux和React从API加载数据 . 尽管成功地提取数据并将其应用于状态,但它仍然会出错 .

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

React Component:

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>;
    }
}

Reducer:

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;
}

Actions:

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 回答

  • 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 来处理履行承诺 .

  • 0

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

相关问题