2017-05-08 2 views
1

반응을 사용 중입니다. react-redux, redux입니다. 그런 다음 문제가 생겼습니다. 내가 사용하는 경우 :createStore() 내에서 applyMiddleware를 사용할 때 리스너 상태를 변경할 수 없습니다.

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

applyMiddlewarecreateStore

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

CreateStore에서 세 번째 인수해야 다음 인수를

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

인수

  1. reducer (Function) 소요 , 주어진 t 그는 현재 상태 트리 및 처리 할 작업.

  2. [preloadedState] (모두) : 초기 상태. 범용 응용 프로그램에서 서버의 상태를 수화 시키거나 이전에 직렬화 된 사용자 세션을 복원하도록 선택적으로 지정할 수 있습니다. combineReducers으로 감속기를 생산 한 경우 전달 된 키와 동일한 모양의 일반 개체 여야합니다. 그렇지 않으면 감속기가 이해할 수있는 것을 자유롭게 전달할 수 있습니다.

  3. [enhancer] (Function) : 상점 증강 인자. middleware, 시간 이동, 지속성 등과 같은 타사 기능을 사용하여 저장소를 향상 시키려면 선택적으로 지정할 수 있습니다. Redux와 함께 제공되는 유일한 저장소 향상 프로그램은 applyMiddleware()입니다. 이 그렇다

당신은 액션이 서비스를 형성하고 또한

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

정말 고마워요. 내 실수 . "** next (action); **"( –

+0

:)을 놓쳤습니다. 첫눈에 그다지 놓쳤습니다. –

관련 문제