javascript - NgRx @Effect 与 createEffect

标签 javascript angular typescript decorator ngrx

createEffect 和有什么区别对比 @Effect ngrx中的注释?

@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 }对于不派发新 Action 的效果仍然存在,添加此选项也消除了效果需要返回 Observable<Action> 的限制.
从 NgRx 8 默认开始,发生这种情况时会自动重新订阅效果。这为错过不愉快路径的地方增加了一个安全网。
可以通过设置 resubscribeOnError 来关闭此功能在效果级别为假。
例子:

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

关于javascript - NgRx @Effect 与 createEffect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67294087/

相关文章:

angular - 如何查看ngIf是否生效

html - 在 angular2 中重新加载 div

javascript - TypeScript 覆盖 ToString()

typescript - 如何在 TypeScript 中将字符串细化为 "string enum"?

javascript - 使用嵌套层次结构实现可折叠

javascript - JQuery 1.7 中的 JSONP 错误

将复选框值保存到数组(本地存储)的 JavaScript 在 for 循环期间重复自身

javascript - 检查 Array javascript 中的所有对象值是否有 boolean false

javascript - 仅当选中单选按钮时才需要输入字段 - Angular 4

javascript - 如何在 TypeScript 中链接函数参数类型?