2016-10-17 10 views
0

나는 감속기를 여러 파일로 분할하여 제대로 관리 할 수있는 상황이 있습니다.복수의 감속기를 결합

내가 감속기로 2 가지를 할 것이라고 말합니다.

  1. 핸들 제품 만 해당됩니다.
  2. 연락처 만 처리합니다.

작동하는 동일한 파일에서 수행 할 수 있지만 관리하기가 어려워집니다.

따라서 이동 사용자 가독성을 위해 분할하고 싶습니다.

여기 나는 감속기 파일을 분할하려고했습니다.

이것은 제품을 가져 오는 데 사용할 단축기 중 하나입니다.

module.exports.products=function(state, action) { 
console.log("################################## branch_order"); 
console.log("reducer",state,action); 
if (state==null) { 
    return {}; 
} 
var new_state=$.extend(true,{},state); // XXX: deep-copy 
console.log(action.type,"action type") 
switch (action.type) { 
    case "PRODUCT_LOADING": 
     new_state.product_loading=true; 
     break; 
    case "PRODUCT_LOADED": 
     new_state.product_loading=false; 
     new_state.product=action.product; 
     break; 

} 
console.log("new_state",new_state); 
return new_state; 
} 

다음은 연락처를 저장할 다른 축소 기입니다.

module.exports.contacts=function(state, action) { 
console.log("################################## pawn_order",state); 
console.log("reducer",state,action); 
if (state==null) { 
    return {}; 
} 
return state; 

은}

이 내가 감속기를 결합하고 방법이다.

var product = require("./prodcut") 
var contact = require ("./contact") 
var combineReducers = require ('redux').combineReducers 


module.exports = combineReducers({product,contact}); 

이것은 내 주 파일에서 전화를 걸어 저장하는 방법입니다.

var reducers = require ("./reducer") /// <<<<< this is how i call 
var RPC = require('./RPC') 
//var actions = require("./actions") 
var createStoreWithMiddleware=applyMiddleware(thunkMiddleware)(createStore); 
var store=createStoreWithMiddleware(reducers); 
ReactDOM.render(<Provider store={store}><Index/></Provider> , document.getElementById('content')) 

나는 combine reducers에서 자습서를 따라하려고했지만 몇 가지 문제가 발생했습니다.

결합이 작동하는 것 같습니다.

무엇이 잘못 되었나요?

최초의 감속기는 (내가 두 번째 만회 (접촉)라고 전체 상태가

나는 상태에서 데이터를 추가 할을 대체 할 것으로 보인다 때 작동 (제품)를 호출하면 ? 난 내 접촉하는 상태 데이터를 호출하는 방법을

그냥 정보를 원하시면이가) 도와주세요 그것을하는 방법을 모른다 :

var select=function(state){ 
return { 
    product_loading:state.product_loading, 
    product:state.product, 

} 
} 

을 그리고 이것은 내가 어떻게 내 구성 요소에 전화하십시오

render:function(){ 
    if (!this.props.product_loading) return <div> Loading</div> 

미리 감사드립니다. 앞으로 몇 가지 해결책을 기대합니다.

+0

실용적인 예제를 함께 뽑아서 재생할 수 있습니까? (예 : jsbin) –

+0

감속기는 각 감속기가 전체 상태의 자체 비트와 멍청이를 가지고 있음을 의미하는 별도의 상태 나무에서 작업합니다. 따라서 "글로벌"상태 (다른 감속기에서와 같이)는 보이지 않지만 현재 감속기에 관심이있는 상태를 복제해야합니다. –

답변

1

combineReducers을 사용하면 각 감속기는 상태 슬라이스 만 볼 수 있습니다.

function r1(state) { 
    console.log (state); //logs v1 
} 

function r2(state) { 
    console.log (state); //logs v2 
} 

const c = combineReducers({ r1, r2 }); 

c({ r1: 'v1', r2: 'v2' }, { type: 'MY_ACTION' });