[英]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.