0
다음 코드를 @ngrx example에서 가져 왔습니다. 새로운 결과는 이전과 다른 경우에만 상기 코드에서 항상 @ngrx store.select를 사용하여 상태를 방출하는 방법?
constructor(private store: Store<fromRoot.State>) {
this.searchQuery$ = store.select(fromRoot.getSearchQuery).take(1);
this.books$ = store.select(fromRoot.getSearchResults);
this.loading$ = store.select(fromRoot.getSearchLoading);
}
의
store.select
값을 방출한다.
this.books$
은 이전 스트림과 동일하거나 다른 새 스트림과 관련하여 항상 어떻게 낼 수 있습니까? 어떤 것을 store
방법으로 사용해야합니까?
UI가''@ngrx DB'' (''cache''')에서'''@ngrx effect''를 통해 데이터를 요청하는 경우가 있습니다. ''cache'''에 데이터가 없으면, 액션을 보내고,이 액션에서 페이로드를 체크하는 감속기에서 아무것도 발견하지 못하고''cacheAvailbility''''를' ''거짓''. 그 상태는 컨테이너에 의해 구독됩니다'''옵저버''는 DB에서 읽을 다른 행동을 시작합니다. 이''옵저버''가 가입 한 국가는''거짓''과''거짓''으로 다시''캐시''에 데이터가 없으면 다시 거짓이 될 수 있습니다. 이 두 가지 상황 모두에서 DB 준비가 필요합니다. –
이 작업을 복잡하게 만들었던 캐시 가용성을 관리하기 위해'''state'''를 사용했습니다. 이펙트 자체에 다른 액션을 전달할 수는 있지만'''if''와 같은''if'' 문을 사용해야합니다 if (data === undefined) { \t store.dispatch (new ReadFromDBAction (customerId)) } else { \t store.dispatch (새 ReachFromCacheSuccessfulAction (고객 ID)) }'''' –
복잡한 아키텍처가 마음에 들지만, 단순화 될 수 있다고 확신합니다.하지만 그건 다른 질문 일뿐입니다. 한 가지 : 효과 내에서 '디스패치'를 사용하지 마십시오. 효과는 후속 작업 만 반환해야합니다. 효과의 중간에 작업을 전달합니다 .____는 ngrx 저장소의 복잡성을 초래합니다. – olsn