2

我对 Redux 及其概念非常陌生,尤其是中间件,所以对于任何愚蠢的错误,我深表歉意。

在我的这个项目中,我需要使用 redux-thunk。我查看了一些关于如何应用它们的指南和解释。然后我一直收到错误“未捕获的类型错误:无法读取未定义的属性'调度'”。我打开开发人员工具并显示此错误:

在此处输入图像描述

我不知道我是否做对了。以下是我的动作创建者和商店的代码。

动作/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'));
4

2 回答 2

4

我相信你的电话applyMiddleware()有点不对劲。您想直接传递导入的 Promise 中间件,而不是调用它:applyMiddleware(promise, thunk).

该功能基本上是一个工厂。Redux 将调用它并传入 store 的dispatch函数,然后中间件可以在它准备好时使用它来调度操作。

于 2016-09-21T21:00:15.660 回答
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
  };
}
于 2016-09-21T21:17:13.200 回答