簡體   English   中英

NgRx @Effect 與 createEffect

[英]NgRx @Effect vs createEffect

ngrx 中的createEffect@Effect注釋有什么區別?

@Injectable()
export class ContactsEffects {

constructor(
    private actions$: Actions,
    private contactsService: ContactsService,
    private contactsSocket: ContactsSocketService
  ) {}


  destroy$ = createEffect( () => this.actions$.pipe(
    ofType(remove),
    pluck('id'),
    switchMap( id => this.contactsService.destroy(id).pipe(
      pluck('id'),
      map(id => removeSuccess({id}))
    ))
  ));

  @Effect()
  liveCreate$ = this.contactsSocket.liveCreated$.pipe(
    map(contact => createSuccess({contact}))
  );

}

@ngrx/effects createEffect 用於類型安全 作為@Effect()裝飾器的替代方案,NgRx 8 提供了createEffect function。 使用createEffect的優點是它是類型安全的,如果效果不返回Observable<Action>它將給出編譯錯誤。 對於不調度新動作的效果,選項{ dispatch: false }仍然存在,添加此選項也消除了效果需要返回Observable<Action>的限制。

從 NgRx 8 默認開始,發生這種情況時會自動重新訂閱效果。 這為錯過不愉快路徑的地方增加了一個安全網。 可以通過在效果級別將resubscribeOnError設置為 false 來關閉此功能。 例子:

login$ = createEffect(() => .....), { resubscribeOnError: false });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM