微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NgRx @Effect 与 createEffect

如何解决NgRx @Effect 与 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/效果 类型安全的 createEffect 作为 @Effect() 装饰器的替代,NgRx 8 提供了 createEffect 函数。使用 createEffect 的优点是它是类型安全的,如果效果没有返回 Observable<Action> 它将给出编译错误。选项 { dispatch: false } 仍然存在于不发送新 Actions 的效果中,添加此选项还消除了效果需要返回 Observable<Action> 的限制。

默认从NgRx 8开始,出现这种情况时自动重新订阅效果。这为遗漏不愉快路径的地方增加了一个安全网。 可以通过在效果级别将 resubscribeOnError 设置为 false 来关闭此功能。 例子:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。