2016-11-10 1 views
2

현재 Redux 응용 프로그램에서 API의 데이터를 가져 오는 3 개의 개별 감속기가있는 상황이 있습니다. 내 이경 하나의 예는 다음과 같습니다Redux 별도의 감속기에서 하나의 동작 유형을 사용할 수 있습니까?

const INITIAL_STATE = { 
    data: [], 
    loading: false, 
    error: '' 
}; 

export default (state = INITIAL_STATE, action) => { 
    switch (action.type) { 
    case GET_ALL_ORDERS_START: 
     return { 
     ...state, 
     loading: true 
     }; 
    case GET_ALL_ORDERS_SUCCESS: 
     return { 
     ...state, 
     allOrders: action.payload, 
     loading: false 
     }; 
    case GET_ALL_ORDERS_FAIL: 
     return { 
     ...state, 
     loading: false, 
     error: action.payload 
     }; 
    default: 
     return state; 
    } 
}; 

참고로드 및 오류 상태는, 이러한 각 전류 감속기 동일하며, API에서 가져 오는 데이터를 포함하는 I 작성 이후의 감속기에 대한 것입니다.

상태로드 및 오류 부분에만 사용되는 추가 감속기를 추가하고 싶습니다. 다른 3 명은 데이터를 저장합니다.

이 나에게 줄 것입니다 :

데이터 감속기 × 3

const INITIAL_STATE = { 
    data: [] 
    // any other state in the future 
}; 

export default (state = INITIAL_STATE, action) => { 
    switch (action.type) { 
    case GET_ALL_ORDERS_SUCCESS: 
     return { 
     ...state, 
     allOrders: action.payload 
     }; 
    default: 
     return state; 
    } 
}; 

로드/오류 감속기를

const INITIAL_STATE = { 
    loading: false, 
    error: '' 
}; 

export default (state = INITIAL_STATE, action) => { 
    switch (action.type) { 
    case GET_ALL_ORDERS_START: 
     return { 
     ...state, 
     loading: true 
     }; 
    case GET_ALL_ORDERS_SUCCESS: 
     return { 
     ...state, 
     loading: false 
     }; 
    case GET_ALL_ORDERS_FAIL: 
     return { 
     ...state, 
     loading: false, 
     error: action.payload 
     }; 
    default: 
     return state; 
    } 
}; 

(전체 응용 프로그램에 대한로드/오류를 처리)이 방법을 볼 수 있듯이 GET_ALL_ORDER_SUCCESS 액션 유형은 2 개의 개별 감속기에서 사용됩니다. 제 질문은이게 괜찮습니까? 아니면 국제 대회에 반대합니까?

미리 감사드립니다.

답변

6

나는 그것이 완벽하다고 생각합니다. 액션과 리 듀서가 1 : 1 매핑을 가지고 있다고 말하는 곳은 없습니다. 실제로, Redux의 작성자는 명시 적으로 그들 사이의 관계가 없다고 말하며, 많은 감속기가 단일 동작에 반응 할 수 있다고 말하면, 단일 감속기는 다중 동작에 반응 할 수 있습니다. https://github.com/reduxible/reduxible/issues/8

트윗 : : 관련 SO https://twitter.com/dan_abramov/status/691608868628119552

:

은 그가 가장 잘 말한다 생각 나는 솔루션을 구현 한 @julianljk Redux: Why not put actions and reducer in same file?

+1

덕분에 아주 잘 작동하는 것 같다하지만 난 그냥 설명을 원했다 나중에 @ £ $에서 나를 물지는 않을 것입니다. – mtwallet

+1

로깅에 신경 쓰면, 디버깅하기가 덜 명백하고 어렵게되는 모든 동작이 트레이드 오프입니다. 여러 동작이 더 명확한 경우. 그 균형에 대해 생각하는 것 같아 – julianljk

+0

물론입니다. 주제에 대한 자세한 내용은 http://redux.js.org/docs/faq/Actions.html#actions-reducer-mappings 및 http://redux.js.org/docs/recipes/StructuringReducers.html을 참조하십시오. – markerikson

관련 문제