2015-09-27 3 views
4

Я получаю ошибку «промежуточное ПО не является функцией» при запуске этого кода.Средство промежуточного ПО Redux не определено

import 'babel-core/polyfill'; 
import { thunkMiddleware, Provider } from 'redux-thunk'; 
import createLogger from 'redux-logger'; 
import { createStore, applyMiddleware } from 'redux'; 
import { fetchDistricts, fetchSchools } from './actions.es6.js'; 
import rootReducer from './reducers.es6.js'; 
// import App from './components/App.es6.js'; 

const logger = createLogger({ 
    level: 'info', 
    collapsed: true, 
    predicate: (getState, action) => {action.type; } 
}); 


const createStoreWithMiddleware = applyMiddleware(
    thunkMiddleware, 
    logger 
)(createStore); 

const store = createStoreWithMiddleware(rootReducer); 

store.dispatch(fetchDistricts('California')).then(state => 
    { 
     var districts = store.getState().districtsByState['California'].districts; 
     var fetchSchoolsDfds = []; 
     for(var i = 0; i < districts.length; i++) { 
      fetchSchoolsDfds.push(store.dispatch(fetchSchools(districts[i].id))); 
     } 
    } 
); 

let rootElement = document.getElementById('root'); 

Это в ES6, и я транслирую с помощью Babel. Я могу опубликовать скомпилированный код, если вы хотите, но он очень длинный.

Почему я получаю сообщение об ошибке?

EDIT

Хорошо, я вскочил и посмотрел на transpiled JS. Похоже, что эта функция -

var createStoreWithMiddleware = _redux.applyMiddleware(_reduxThunk.thunkMiddleware, logger)(_redux.createStore); 

и _reduxThunk не имеют свойство thunkMiddleware. В консоли, когда я утешаю бревно из _reduxThunk, я вернусь этот

function thunkMiddleware(_ref) { 
    var dispatch = _ref.dispatch; 
    var getState = _ref.getState; 

    return function (next) { 
    return function (action) { 
     return typeof action === 'function' ? action(dispatch, getState) : next(action); 
    }; 
    }; 
} 

Так выглядит _reduxThunk IS thunkMiddleware. Я предполагаю, что это ошибка бабуля - почему это так неправильно?

+0

Сторона примечания: у вас есть функция стрелки no-op для 'предикат'. – JMM

ответ

3

Хорошо. Это было довольно просто и глупо. Оказывается, что провайдер не находится в «redux-thunk» и находится в «redux-response».

Это был случай плохого сообщения об ошибке.

+0

Не могли бы вы объяснить свой ответ, пожалуйста? У меня такая же проблема. – Rys

+0

Вам нужно сделать это 'import {Provider} из 'redux-react'';' Я думаю – praks5432

+1

Незначительный пункт ... import {Provider} из' react-redux '... not' redux-react ' –