2017-05-08 65 views
1

我正在使用react,react-redux,redux。然后我遇到了问题。 当我使用:使用applyMiddleware时,无法监听状态发生改变createStore()

const store = createStore(reducers); 

    store.subscribe(() => { 
     console.log(getState()); 
    }); 

=>结果:我可以看到价值的getState()当我使用派遣一些动作来更新/获取/ ...等状态来改变。但如果我使用applyMiddleware。我不会看到值处于状态改变时,有任何动作

import indexService from './dashboard/services/services.jsx'; 

const store = createStore(reducers, applyMiddleware(indexService)); 

store.dispatch({ type: 'DASHBOARD_GET_CURRENT_DEALS' }); 

这是indexService组件

import { config } from '../../helps.jsx'; 

const indexService = store => next => action => { 

    switch (action.type) { 

     case 'DASHBOARD_GET_CURRENT_DEALS': 

      fetch(config.homeUrl + '/data/_curentDeals.json', { 

       method: 'GET', 
       headers: { 'Content-Type': 'application/json' } 

      }).then(function (response) { return response.json() }).then(function (json) { 

       next({ 

        type: 'DASHBOARD_GET_CURRENT_DEALS', 

        json 

       }) 

      }).catch(function (error) { console.log('erros', error); }); 

      break; 

     default: 
      break; 
    } 

}; 

export default indexService; 

感谢您的帮助;

回答

1

applyMiddleware应在createStore

const store = createStore(reducers, {}, applyMiddleware(indexService)); 

CreateStore第三个参数采用下列参数

createStore(reducer, [preloadedState], [enhancer]) 

参数

  1. reducer (Function):返回下一个状态树有还原能力,给定t他目前的状态树和一个要处理的动作。

  2. [preloadedState](任意):初始状态。您可以选择将其指定为通用应用程序中的服务器状态,或恢复先前序列化的用户会话。如果您使用combineReducers生产了减速机,则它必须是与传递给它的键形状相同的普通物体。否则,你可以自由地传递你的reducer可以理解的任何东西。

  3. [enhancer] (Function):店面增强。您可以选择指定它来增强商店的第三方功能,如middleware,时间旅行,持久性等。Redux附带的唯一商店增强器是applyMiddleware()

从这个

除了你是不是重新调整动作形成的服务,也可以在动作调用next

import { config } from '../../helps.jsx'; 

const indexService = store => next => action => { 
    next(action); 
    switch (action.type) { 

     case 'DASHBOARD_GET_CURRENT_DEALS': 

      fetch(config.homeUrl + '/data/_curentDeals.json', { 

       method: 'GET', 
       headers: { 'Content-Type': 'application/json' } 

      }).then(function (response) { return response.json() }).then(function (json) { 

       return next({ 

        type: 'DASHBOARD_GET_CURRENT_DEALS', 

        json 

       }) 

      }).catch(function (error) { console.log('erros', error); }); 

      break; 

     default: 
      break; 
    } 

}; 

export default indexService; 
+0

谢谢你。 我试过了,但它仍然没有工作。 –

+0

非常感谢你。我的错 。我错过了“**下一步(行动); **” –

+0

:),我也乍一看错过 –