使用 redux-promise 保持 'dispatch' undefined
Keep getting 'dispatch' undefined with redux-promise
我对 Redux 及其概念非常陌生,尤其是中间件,所以对于任何愚蠢的错误我深表歉意。
我的这个项目,需要用到redux-thunk。我看过一些关于如何应用它们的指南和解释。然后我一直收到错误 "Uncaught TypeError: Cannot read property 'dispatch' of undefined"。我打开开发人员工具并显示此错误:
我不知道我做的是否正确。以下是我的动作创建者和商店的代码。
actions/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'));
我相信你打给 applyMiddleware()
的电话有点不正常。你想直接传递导入的promise中间件,而不是调用它:applyMiddleware(promise, thunk)
。
那个函数基本上就是一个工厂。 Redux 将调用它并传入商店的 dispatch
函数,然后中间件可以在准备就绪时使用它来调度操作。
我不是很确定,但是是这样的
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
};
}
我对 Redux 及其概念非常陌生,尤其是中间件,所以对于任何愚蠢的错误我深表歉意。
我的这个项目,需要用到redux-thunk。我看过一些关于如何应用它们的指南和解释。然后我一直收到错误 "Uncaught TypeError: Cannot read property 'dispatch' of undefined"。我打开开发人员工具并显示此错误:
我不知道我做的是否正确。以下是我的动作创建者和商店的代码。
actions/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'));
我相信你打给 applyMiddleware()
的电话有点不正常。你想直接传递导入的promise中间件,而不是调用它:applyMiddleware(promise, thunk)
。
那个函数基本上就是一个工厂。 Redux 将调用它并传入商店的 dispatch
函数,然后中间件可以在准备就绪时使用它来调度操作。
我不是很确定,但是是这样的
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
};
}