2016-09-21 7 views
1

Я действительно новичок в Redux и его концепциях, особенно промежуточном программном обеспечении, поэтому я извиняюсь за любые глупые ошибки.Продолжайте получать «отправку» undefined с redux-prom

В этом проекте, который мне нужен, мне нужно использовать redux-thunk. Я просмотрел несколько руководств и объяснений о том, как их применять. Затем я продолжал получать сообщение об ошибке «Uncaught TypeError: Невозможно прочитать свойство« отправка »неопределенного». Я открыл инструменты для разработчиков и получил показал эту ошибку:

enter image description here

Я понятия не имею, если я делаю что-то правильно. Ниже приведены коды для моих создателей действий и сохранения.

действия/index.js

import axios from 'axios'; 

export function fetchLessons() { 
    console.log('called!'); 
    return function(dispatch) { 
    axios.get(`${ROOT_URL}/lessons`) 
     .then((response) => { 
     dispatch(fetchLessonsSuccess(response)) 
     }) 
     .catch((err) => { 
     dispatch(fetchLessonsError(err)) 
     }) 
    } 
} 

function fetchLessonsError(){ 
    return "An error has occured"; 
} 

function fetchLessonsSuccess(response) { 
    return { 
    type: FETCH_LESSONS, 
    payload: request 
    }; 
} 

index.js (магазин)

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import { Provider } from 'react-redux'; 
import { createStore, applyMiddleware, compose } from 'redux'; 
import { Router, browserHistory } from 'react-router'; 
import rootReducer from './reducers/index'; 
import routes from './routes'; 
import promise from 'redux-promise'; 
import thunk from 'redux-thunk'; 

const middleware = applyMiddleware(promise(), thunk); 
const store = createStore(rootReducer, compose(middleware)); 

ReactDOM.render(
    <Provider store={store}> 
    <Router history={browserHistory} routes={routes} /> 
    </Provider> 
    , document.querySelector('.container')); 

ответ

3

Я считаю, что ваш призыв к applyMiddleware() немного смещен. Вы хотите передать импортированное обещание промежуточного программного обеспечения напрямую, а не называть его: applyMiddleware(promise, thunk).

Эта функция в основном фабрика. Redux вызовет его и передаст функцию в магазине, которую промежуточное ПО может использовать для отправки действий всякий раз, когда оно будет готово.

0

я не совсем уверен, но что-то вроде этого

export function fetchLessons() { 
    console.log('called!'); 
    return function(dispatch) { 
    return dispatch({ 
     type: 'FETCH_LESSONS', 
     payload: axios.get(`${ROOT_URL}/lessons`) 
     .then((response) => { 
      dispatch(fetchLessonsSuccess(response)) 
     }) 
     .catch((err) => { 
      dispatch(fetchLessonsError(err)) 
     }); 
    }); 
    }; 
} 

function fetchLessonsError(){ 
    return "An error has occured"; 
} 

function fetchLessonsSuccess(response) { 
    return { 
    type: 'FETCH_LESSONS_FULFILLED', 
    payload: response 
    }; 
}