2017-11-07 12 views
0

나는 2 개의 reducers를 가지고 있습니다 redAredB입니다. 또한 두 개의 컨트롤러가 있습니다 ctrlActrlB입니다. 현재Redux 구독 전체 주간 전화

, 상태 변화 중 하나 레다 또는 redB에서 발생, 모두 ctrlActrlB 모두가 store.subsribe()를 호출해야하기 때문에 변화에 관계없이 상태에서 일어날 때, 그들은 모두 알림을받을 것 감속기가 그것을 일으켰습니다.

는 (? 또는 어쩌면 더 나은하는 행위별로이를 통지)

만을 변경 한하는 감속기를 기반으로 컨트롤러를 알릴 수있는 방법이 있나요 또는이의 생각 내 방식의 버그 REDUX? 당신의 의견을 듣고 고맙게 생각합니다. 고마워요

+0

귀하의 질문은 너무 광범위합니다 ... 아마 실제 코드, 예상 대 실제 행동을 보여주는 스 니펫. –

+0

가입 된 메소드를 확인하면 필요한 실제 값이 변경되는지 확인할 수 있습니다. 다른 한편, 컨트롤러는 적어도 "redux"세계에서 동작에 대해 알지 않아야합니다. Redux는 행동 유형을 처리하고 그들과 무엇을해야합니까? – cnexans

답변

1

Redux가 작동하는 방식입니다. Redux는 상태의 다른 부분에 대해 다른 변경 이벤트를 가지고 있지 않습니다. 실제로, 이 없어도 액션이 루트 축소 기 함수에 도달 할 때마다 시간이 실행됩니다.은 해당 작업의 결과로 변경됩니다.

Redux는 가입자에게 작업이 발송되었음을 알리고 가입자가 현재 상태에 따라 수행 할 작업을 결정합니다. 일반적으로 현재 상태 대 이전 상태를 비교하는 기능이 있으며 React-Redux의 connect() 함수는 자동으로이를 수행하는 래퍼 구성 요소를 생성합니다.

그렇습니다. 스토어에 가입 한 두 개의 다른 구성 요소가있는 경우 state.a이 업데이트되었고 구성 요소에만 state.b에만 관심이 있어도 작업이 발송 될 때마다 각 구성 요소에 알림이 전송됩니다.

또한 상점에 ​​"수동으로"가입하는 것은 바람직하지 않습니다. 나는 긴 코멘트 explaining why you should use connect() to interact with the Redux store in a React app를 썼다.

당신이 생산에 그것을 할 방법은 아니지만, 기본적인 아이디어를 보여줍니다
let prevState; 

store.subscribe(() => { 
    const currState = store.getState(); 
    const stateHasChanged = !_.isEqual(currState, prevState); 

    prevState = currState; 
}); 

:에 대한 참조를 유지 여기에 편집

는 가입자가 상태를 diff를 수있는 방법의 예 이전 상태, 현재 상태 가져 오기, 두 가지 사이의 비교 일을하십시오.

+0

고맙습니다. 현재 바닐라 js 만 사용하여 반응으로 옮기기 전에 REDUX에 대해 잘 이해하고 있습니다. 여기서 가장 중요한 질문은 가입자가 국가 변경의 원인을 어떻게 알 수 있습니까? 내가 아는 한, 국가 변경을 초래 한 액션은 가입시 반환되지 않으며 마지막으로 호출 된 액션으로 변수를 저장하는 것이 다소 잘못되었습니다. 바닐라 JS에 대해 어떻게 생각하세요? –

+0

내 편집 된 답글보기 – markerikson

+1

또한, fwiw : 일반적으로 다른 방법으로 일을 수행하는 것이 좋습니다. 먼저 React를 배우고 Redux를 학습합니다. 즉, 원하는 순서대로 자유롭게 태클해야합니다. – markerikson