@
beyondex 我在初用 rxjs 时也遇到你这样的问题。如果做不到以 stream 的方式来思考,确实 rxjs 很多时候会使应用复杂度更高。
然而真正掌握这种流式思维后,你会发现引入 rxjs 本身就意味着整个应用都应该采用 rxjs ,当大部分数据都以流的方式呈现,或是很轻易地能转换成流的时候,你会发现你对整个应用各个部分的状态具有了前所未有的全方面控制,很多先前很繁琐的操作在数据源全部变成流后可以通过操作符非常干净且轻而易举地实现。
遗憾的是,Angular 对 rxjs 的态度相当尴尬,其组件的 Input 并非是流,这也导致了很多 Angular 开发者,包括我自己,在一开始完全没办法做到流式思维,因为数据的源头并不是流。这也导致很多 Angular 开发者的开发体验相当糟糕,只能说是一个设计失误。
对此,我的解决方案是:
// prettier-ignore
@
Input(“value”) set valueInput(v: string) { this.value$.next(v) }
value$ = new ReplaySubject(1)
一个 Input 占三行代码,我承认这很丑陋,但它真的非常实用。
幸运的是,即将落地的 Signals Component 提案将彻底解决这个问题,因为组件的 Input 变成了 Signal ,而 Signal 与 Observable 之间可以非常轻易地互相转换。可以看看我之前关于 Signals 提案的文章。
我的 Reply 应用对于 rxjs 的运用也许能够给你带来一些启发,有兴趣的话可以参考一下:
https://github.com/TheNightmareX/reply