2017-05-08 67 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

:),我也乍一看錯過 –