在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}))
);
}发布于 2021-04-28 13:24:06
@ NgRx /effects createEffect用于类型安全作为@Effect()装饰器的替代,NgRx 8提供了createEffect函数。使用createEffect的优点是它是类型安全的,如果效果不返回Observable<Action>,它将产生编译错误。对于不分派新操作的效果,选项{ dispatch: false }仍然存在,添加此选项还会删除效果需要返回Observable<Action>的限制。
默认情况下,从NgRx 8开始,会自动重新订阅发生这种情况时的效果。这为错过不愉快的道路增加了一个安全网。可以通过在效果级别将resubscribeOnError设置为false来关闭此功能。示例:
login$ = createEffect(() => .....), { resubscribeOnError: false });https://stackoverflow.com/questions/67294087
复制相似问题