2017-10-02 2 views
0

React Redux에서 모듈 간 통신을 설정하는 올바른 방법은 무엇입니까?React-Redux 교차 모듈 통신

어떤 경우에는 여러 모듈로 업데이트해야하는 유스 케이스가 있다고 가정합니다. 어디서 코드를 작성해야합니까?

예 1 : 모듈 A는 모듈 B에있는 링크를 클릭에보기 B.보기 A와 모듈 B에 대한 작업을 제어 나는 경우, 모듈 A와 모듈 B.

다른 방법으로 모두 몇 가지 조치를 파견 할 필요가 사용 사례가 있는데, 모듈 A 또는 모듈 B에서 작업을 파견해야하지만 모듈 A와 모듈 B 모두에서 수행해야 할 작업이 있습니다.

정확하게 올바르게 처리 할 수 ​​있도록 응용 프로그램을 어떻게 디자인해야합니까? (모듈이 액션 + 리듀서 + 액션 크리에이터로 구성된 내 애플리케이션에 대한 코드 배치의 덕 패턴을 사용하고 있습니다.)

+0

__ "사용자를 View A"_로 가져 가고 싶습니까? 당신은 라우팅을 의미합니까? 어쨌든 모듈이나 부모가'redux' 스토어에 연결되어 있다면 액션을 디스패치하고'reducers'에서 새로운 상태를 반환 한 후에 새로운 데이터를 받게됩니다. –

+0

상태 변경은 감속기를 통해 발생합니다 ...하지만 모듈 A와 B 모두에서 상태를 업데이트해야한다고 가정합니다.이 작업을 어디에서 파견해야합니까? – poushy

답변

1

이것은 "오리"패턴을 개념적으로 좋아하지 않는 이유 중 하나입니다. 내 게시물 The Tao of Redux, Part 2 - Practice and Philosophy 인용 : 나에게

을은 "오리"패턴에 몇 가지 개념 단점이있다. 하나는 동일한 동작에 독립적으로 응답하는 다중 슬라이스 축소 기의 아이디어에서 벗어나도록 안내하는 것입니다. "오리 (ducks)"에 대해서는 아무리 많은 감속기가 반응하는 것을 막지는 않지만 하나의 파일에 모든 내용을 포함 시키면 모든 것이 자체 포함되어 시스템의 다른 부분과 상호 작용할 가능성이 적음을 알 수 있습니다. 의존성 체인과 수입의 일부 측면도 포함됩니다. 시스템의 다른 부분이 오리에서 액션 크리에이터를 가져오고 싶다면, 프로세스의 감속기 로직을 ​​따라 끌 수 있습니다. 감속기는 실제로 다른 곳으로 가져올 수 없지만 해당 파일에 대한 종속성이 있습니다. 그것이 당신을 괴롭히지 않는다면, "오리"를 자유롭게 사용하십시오.

네 가지 방법은 내가 두 모듈 '감속기이 같은 행동에 반응하도록 내 머리 위로 떨어져 생각할 수있다 :

  1. 유무 모듈 A 수입 모듈 B의 "오리"에서 액션 상수 직접
  2. 모듈 A가 import * as types from "moduleB/constants"을 수행하도록 작업 상수를 별도의 파일로 정의하십시오. 모듈 A는 실제로 사가 또는 어떤 식 으로든 행동을 함께 접착제하기 관찰과 같은 모듈 B
  3. 사용에서 별도의 부작용 라이브러리 아무것도 가져 오기되지 않도록
  4. 는 작업 유형 문자열을 중복. 당신이 정말로완전하고 완전히 다른 모든 것들에서 캡슐화 된 응용 프로그램의 다른 부분을 유지하려고 아니라면 나는 개인적으로 교차 "모듈"수입에 대해 걱정하지이나 제안 것

는 너무 많은 종속성.

+0

답장을 보내 주셔서 감사합니다. React-Redux에서 모듈 간 통신을 처리 할 수있는 좋은 문서를 찾지 못했습니다. 나는 고립 된 모듈을 유지하는 것을 선호하지만, 현재 그렇게 할 방법이 없다. 현재 B에서 A로 직접 작업을 가져 오는 방법 1을 사용하고 있습니다. 실제로 이러한 상호 작용을 처리하고 모듈을 서로 독립적으로 유지하는 관찰 가능 또는 게시자 하위 모듈을 만드는 방법을 고려했습니다. 나는 여기서 언급 한 다른 모든 방법을 살펴보고 그들 중 어느 것이 나의 필요에 가장 잘 부합되는지 알아보기 위해 노력할 것입니다! – poushy

+1

"모듈 간 통신"측면을 과도하게 생각할 수도 있습니다. 일반적으로 상태 업데이트가 발생하거나 사가/관찰 가능한 동작을 트리거하여 다른 모듈이 신경 쓸 수있는 작업을 디스패치해야합니다. 몇 가지 예를 보려면 https://medium.com/@totaldis/redux-saga-in-action-s-f7d11cffa35a를 읽어보십시오. – markerikson

0

뷰는 상점에서 바로 제어됩니다.

그래서 액션이 A 또는 B에서 발생하면 각각 B 또는 A의 뷰를 업데이트하는 액션을 전달합니다.

{ 
    currentAView: 'product1' 
} 

B보기에서 버튼을 클릭하십시오. 조치는 showProduct(product2)입니다.

{ 
    currentAView: 'product2' 
}