What is pipe for in rxJS
我想我有基本概念,但有些模糊之处
所以一般来说,这就是我如何使用一个可观测的:
1 2 3
| observable.subscribe(x => {
}) |
如果我想过滤数据,我可以使用:
1 2 3 4 5 6 7
| import { first, last, map, reduce, find, skipWhile } from 'rxjs/operators';
observable.pipe(
map(x => {return x}),
first()
).subscribe(x => {
}) |
号
我也可以这样做:
1 2 3 4 5 6
| import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
observable.map(x => {return x}).first().subscribe(x => {
}) |
所以我的问题是:
有什么区别?
如果没有区别,为什么存在函数管道?
为什么这些函数需要不同的导入?
- 我正要说这是为定制的、非本地的、操作员设计的,但我甚至不知道这是否正确。pipe()是否允许您传递创建的运算符?
"pipable"(以前的"lettable")运算符是自RXJS 5.5以来使用运算符的当前和推荐方法。
我强烈建议您阅读官方文档https://github.com/reactivex/rxjs/blob/master/doc/pipeable-operators.md
主要的区别在于,在不改变某些全局Observable对象的情况下,可以更容易地创建自定义运算符,并且更好地实现三重可访问性,如果两个不同的方想要创建相同名称的运算符,则可能会发生冲突。
为每个操作员使用单独的import语句'rxjs/add/operator/first'是一种制作较小应用程序包的方法。通过只导入您需要的操作符而不是整个RXJS库,您可以显著地减少包的总大小。但是,编译器不知道您是否导入了'rxjs/add/operator/first',因为您在代码中确实需要它,或者在重构代码时忘记删除它。这是使用pipable操作符的优点之一,其中未使用的导入将被自动忽略。
- 关于您的断言unused imports are ignored automatically,目前IDE有移除未使用导入的插件。
- 不是每个人都使用这些IDE或插件,很多人使用基本的文本编辑器。可能大多数时候我们都不能转述团队中每个人都在使用与我们相同的IDE/插件集/文本编辑器的语句。
- @Adamfaryna当然,一些团队可能也会在纸上写代码,但是如果他们有现代工具,为什么会这样呢?使用文本编辑器,尤其是不使用重要的插件,类似于在纸上编写代码。你可以这样做,但是为什么有一个优秀的团队/开发人员会这样做呢?
- @只要人们能以高效的方式使用它,denesapp代码编辑器就不重要了。除此之外,这只是个人喜好。您将代码写在纸上的类比是不准确的,您不能在纸上执行代码,但可以执行在任何文本编辑器中编写的代码。
- 我不想开始讨论编辑器,但有一点需要注意:我的类比是关于静态分析的,当你使用文本编辑器或在纸上写作时,你得不到静态分析和其他智能工具的帮助。在我看来,运行代码是另一回事,与编辑完全无关。
- 像tslint这样的工具应该自动警告您未使用的导入,无论您使用什么编辑器,如果您设置工具在后台自动检查代码(例如,在Githooks或Continuosly中,或直接集成到编辑器中)。
- 问:在没有pipe运算符的情况下,是否还有一种使用老式运算符样式的方法?
- @也许你可以,但你必须安装rxjs-compat包github.com/reactivex/rxjs/blob/master/docs_app/content/guide‌&8203;/v6/…
- 很酷,非常感谢