2016-12-28 5 views
2

Итак, я использую реакцию + redux, и я продолжаю получать следующую ошибку: «Невозможно прочитать свойство», затем «неопределенного». По какой-то причине обещание не возвращается. Я также особенно новичок в том, чтобы использовать редукс.Невозможно прочитать свойство 'then' of undefined

Reducer

import { merge } from 'lodash'; 
import * as APIutil from '../util/articles_api_util'; 


import { 
    ArticleConstants 
} from '../actions/article_actions'; 

const ArticlesReducer = (state = {}, action) => { 
    switch (action.type) { 
    case ArticleConstants.RECEIVE_ALL_ARTICLES: 
    debugger 
    return merge({}, action.articles); 
    default: 
     return state; 
    } 
}; 

export default ArticlesReducer; 

магазин

import { createStore, applyMiddleware } from 'redux'; 
import RootReducer from '../reducers/root_reducer'; 
import thunk from 'redux-thunk'; 

import * as APIUtil from '../util/articles_api_util'; 

export const ArticleConstants = { 
    RECEIVE_ALL_ARTICLES: "RECEIVE_ALL_ARTICLES", 
    REQUEST_ALL_ARTICLES: "REQUEST_ALL_ARTICLES" 
} 

Действия

export function fetchArticles() { 
    return function(dispatch) { 
    return APIUtil.fetchArticles().then(articles => { 
     dispatch(receiveAllArticles(articles)); 
    }).catch(error => { 
     throw(error); 
    }); 
    }; 
} 


export const requestAllArticles=() => ({ 
    type: REQUEST_ALL_ARTICLES 
}); 


export const receiveAllArticles = articles => ({ 
    type: RECEIVE_ALL_ARTICLES, 
    articles 
}); 

    const configureStore = (preloadedState = {}) => (
     createStore(
     RootReducer, 
     preloadedState, 
     applyMiddleware(thunk) 
    ) 
    ); 


    export default configureStore; 

ОРСП TIL

export const fetchArticles = (success) => { 
    $.ajax({ 
     method: 'GET', 
     url: `/api/articles`, 
     success, 
     error:()=> (
     console.log("Invalid Article") 
    ) 
    }); 
}; 
+1

Вы можете также разделить 'метод APIUtil.fetchArticles' – Swapnil

+0

@Swapnil я добавил APIUtil – acampbe222

+0

ли вы попробовать использовать' .done' вместо '.then' – Swapnil

ответ

4

функции стрелки делают только неявные return сек, если вы оставите покинуть фигурные скобки. Как только вы включаете фигурные скобки, вы определили тело функции и должны явно указать значение.

Функция fetchArticles написана как функция стрелки с фигурными фигурными скобками. Однако вы явно не возвращаете результат вызова $.ajax(). Таким образом, возвращаемое значение функции - это undefined, и нет обещаний, которые можно было бы отключить.

Смежные вопросы