2

我正在尝试了解导入 rxjs 运算符的最佳实践

似乎我应该share以这种方式导入,但是,以下内容不起作用,因为它说 share 需要 0 个参数。我不太确定如何share正确调用。

import { share } from 'rxjs/operators';

...

public currentUser: Observable<User> = share(this.currentUser$.asObservable());

用旧方法做不会有问题。但是我似乎读过这不是导入https://www.learnrxjs.io/concepts/operator-imports.html的首选方式

import 'rxjs/add/operator/share';

...

public currentUser: Observable<User> = this.currentUser$.asObservable().share();

如果我使用推荐的导入方式,我应该如何调用共享?

4

3 回答 3

3

Usingshare就像自 RxJS 5.5 以来的任何其他“pipable”运算符一样:

import { share } from 'rxjs/operators';

...

this.currentUser$.pipe(share());

有关 pipable 运算符的更多详细信息,请参阅:https ://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

但是请注意,从rxjs/operators导入整个文件https://github.com/ReactiveX/rxjs/blob/master/src/operators/index.ts导入。
这意味着如果您自己捆绑您的应用程序,它的大小可能会显着增长。

因此,您可能希望从其自己的文件中导入每个运算符,例如:

import { share } from 'rxjs/internal/operators/share';

...然后以相同的方式使用它。

这并不总是必要的。如果您使用的是预配置的构建系统,angular-cli它会为您执行路径映射,因此您无需担心并始终使用rxjs/operators. 您可以阅读更多相关信息:

于 2018-01-14T15:35:25.653 回答
0

您的第一种导入方式import { share } from 'rxjs/operators'是错误的,因为那只是导入share操作符类而不是方法操作符。

在第二个示例import 'rxjs/add/operator/share'中这是正确的,因为它表示我想将share运算符添加到我的 observable 中。

rxjs 5.5 中也有letable像 Chybie 所说的运算符,但对于您的用例编号 2 是正确的。

于 2018-01-14T15:25:04.640 回答
0

从 RxJs 5.5 开始,RxJs 引入了 Pipeable(或 lettable)操作符。在此处阅读详细信息:https ://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

简而言之,在 Rxjs 5.5 中使用以下方式很好,尤其是在您使用 typescript 时。

import { share } from 'rxjs/operators';
于 2018-01-14T14:05:14.810 回答