'错误TypeError:无法读取未定义的属性'concat''

时间:2020-03-11 18:14:16

标签: javascript arrays redux react-redux

import {LOADING_POSTS, GET_ERROR, UPDATE_POSTS} from './postTypes';

const initialState = {
    loading : false,
    posts : [],
    error : ''
};

const postReducer = (state = initialState, action) => {
    switch(action.type){
        case LOADING_POSTS :
            return {
                ...state,
                loading : true
            };
        case UPDATE_POSTS : 
            return {
                loading : false,
                posts : state.posts.concat(action.data),
                error : ''
            };
        case GET_ERROR : 
            return {
                ...state,
                loading : false,
                error : action.error
            };
        default : return state;
    }
}

export default postReducer;

每当我尝试更新帖子时,我都会收到“错误TypeError:无法读取未定义的属性'concat'”。任何想法可能是什么问题吗?

2 个答案:

答案 0 :(得分:0)

在您尝试向其state.posts添加新数据时似乎未设置concat

您可以在其中进行检查以防止错误(如果只是在设置posts之前调用了该错误)。如果posts根本没有设置,请调查为什么它没有通过。

return {
  loading : false,
  posts : (state.posts 
    && Array.isArray(state.posts) // Extra check, you do not need this one if you are certain of the type
    && state.posts.concat(action.data)),
  error : ''
};

希望这会有所帮助

答案 1 :(得分:0)

我尝试过,它实际上有效!

import {LOADING_POSTS, GET_ERROR, UPDATE_POSTS} from './postTypes';

const initialState = {
    loading : false,
    posts : [],
    error : ''
};

const postReducer = (state = initialState, action) => {
    switch(action.type){
        case LOADING_POSTS :
            return {
                ...state,
                loading : true
            };
        case UPDATE_POSTS : 
            return {
                loading: false,
                posts: state.posts ? state.posts.concat(action.data) : action.data,
                error : ''
            };
        case GET_ERROR : 
            return {
                ...state,
                loading : false,
                error : action.error
            };
        default : return state;
    }
}

export default postReducer;