NgRx @Effect 与 createEffect

Kin*_*one 7 javascript decorator typescript ngrx angular

createEffectngrx 中的注释与注释有什么区别@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}))
  );

}
Run Code Online (Sandbox Code Playgroud)

Div*_*ohn 15

@ngrx/effects\ncreateEffect 以实现类型安全\n作为@Effect()装饰器的替代方案,NgRx 8 提供了该createEffect函数。使用的优点createEffect是它\xe2\x80\x99s类型安全,如果效果不返回 anObservable<Action>则会给出编译错误。{ dispatch: false }对于不调度新操作的效果,该选项仍然存在,添加此选项还消除了效果需要返回Observable<Action>.

\n

从NgRx 8开始默认情况下,发生这种情况时自动重新订阅效果。这为错过不愉快的路径添加了一个安全网。\n可以通过resubscribeOnError在效果级别设置为 false 来关闭此功能。\n示例:

\n
login$ = createEffect(() => .....), { resubscribeOnError: false });\n
Run Code Online (Sandbox Code Playgroud)\n