2017-10-22 1 views
0

내가 reduxstate 제대로 업데이트하는 방법을 잘 모르겠습니다 돌아 오는에 상태를 업데이트하는 방법 확실하지. 중복 된 항목이 있습니다. 내 감속기 중 하나입니다제대로

const STATE = { 
    windowOne: { ... } 
    windwoTwo: { ... } 
    windowThree: { ... } 
} 

export default function reducer(state = STATE, action) { 
    switch (action.type) { 
     case type.WINDOW_ONE: { 
      return { 
       ...state, 
       windowOne: { 
        ...state.windowOne, 
        foo: action.bar, 
       } 
      } 
     } 
    } 
} 

내 구성 요소

function mapDispatchToProps(dispatch) { 
    return bindActionCreators(combinedActions, dispatch); 
} 

const mapStateToProps = state => { 
    const { windowOne } = state.windowOne; 

    return { 
     windowOne, 
    }; 
} 

export default connect(mapStateToProps, mapDispatchToProps)(SomeComponent); 

그리고 I의 소품에 같은 상태를지도처럼 state 모양을

그게 전부 다양한 감속기를 여기에 결합하십시오

export default combineReducers({ 
    windowOne, 
    windowTwo, 
    windowThree 
}); 

redux-logger을 사용하면 windowOne에 전체 state이 복사됩니다. 거기에서 action을 트리거 한 후 windowTwowindowThree을 찾습니다. 나는 또한 내가하지 const { windowOne } = state이 충분해야이 라인

const { windowOne } = state.windowOne; 

에서 windowOne을 지정해야하는 이유 확실하지 않다? 즉

답변

0

combineReducers에 대한 docs을 확인 ... 관련 될 수있다; 각 감속기에 적절한 상태 조각을 보내고 결과를 병합합니다. 이 후

export default function reducer(state = STATE.windowOne, action) { 
    switch (action.type) { 
     case type.WINDOW_ONE: { 
      return { 
       ...state, 
       foo: action.bar, 
      } 
     } 
    } 
} 

, const { windowOne } = statemapStateToProps에서 작동합니다 : 표시된 감속기,이 경우에만 windowOne을 위해 그것을 초기 상태를 전달하고 windowOne만을위한 업데이트 된 상태를 반환해야 의미합니다. 또한 모든 감속기가 모든 동작을 수신하므로 각 감속기에 기본 케이스가 필요하며 STATE이라는 이름은 더 적절하게 initialState이라고 명명 할 수 있습니다.

+0

흠, 전에 이런 식으로 했어. 그러나 나는'windowOne','windowTwo'와'windowThree' 사이에서 데이터를 교환해야하기 때문에 제가 작성한 코드로 변경했습니다. 내'감속기'를'STATE' 전체에 전달한 다음'windowOne' 부분 만 리턴한다고 생각했습니다. 그것은'state'를 갱신하고 새로 생성 된 데이터는 다른'reducer'에서 액세스 할 수 있습니다. 여기서'STATE'를 전달합니다. 'STATE.windowOne'을 사용하면 업데이트 된 데이터에 액세스 할 수 있어야합니다. – Stophface

+0

'combineReducers'를 사용하면, 전체 상태를 건네주고 반환하면 각 최상위 상태 속성에 중첩 된 복사본이 생성됩니다. 당신은 아마 하나의 감속기를 사용하거나 같은 패키지를 사용하거나 할 것'줄일 - reducers'를, [너머 combineReducers]에서 설명한 바와 같이 (http://redux.js.org/docs/recipes/reducers/BeyondCombineReducers.html# slice-reducers 사이의 데이터 공유). – Oblosys