Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
381 views
in Technique[技术] by (71.8m points)

angular - NgRx - reducer is being triggered for infinite times

I am trying to retrieve local storage data via NgRx effect. PATIENT_FETCH action is dispatched to execute an effect. But having an infinite call upon calling the dispatch method in ngOnInit method.

Here is the stackblitz demo. If you uncomment line 24 in patient.component.ts of given link then reducer is called for infinite times. I might be missing something in NgRx implementation.

question from:https://stackoverflow.com/questions/65885539/ngrx-reducer-is-being-triggered-for-infinite-times

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The problem is the Effect.

 @Effect()
    patient: Observable<any> = this.actions.pipe(
        ofType(PatientActionTypes.PATIENT_FETCH),
        tap((action: ActionTemplate<PatientFetch>) => {
            const patient: any = this.storageService.get(STORAGE_KEY, {});
            return patientActionFactory.create<PatientFetchSuccess>(PatientActionTypes.PATIENT_FETCH_SUCCESS, patient);
        })
    );

The above keeps dispatching the PATIENT_FETCH action, and picks it up again - resulting in an infite loop. From looking at the code you probably want to return the PATIENT_FETCH_SUCCESS action. Therefore, you must replace the tap operator with the map operator.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...