Hacker News new | ask | show | jobs
by mhitza 8 days ago
Are projects still chosing to pick RxJS (or equivalent) which make the code heavily layered and a pain to debug?

Or has sanity reached the Angular ecosystem by now?

3 comments

I believe Signals are the go-to now, but surely RxJS is still present for complex use cases. Are Zones fully gone?
Now we have promises, observables and signals.

I would be more happy if it would be just one of those..

Each one of these solves a different problem.

Promised - async

Observables - streams

Signals - reactivity

In theory that’s true (although observables are for reactivity too), but Angular uses observables for its http library and http requests are very much not streams. It’s one of the main downsides of working with Angular, the http library is mediocre and does come with the added overhead and complexity that rxjs brings.

Until this release (if you only use stable features) using forms meant dealing with observables too, even if you just want to read data when submitting a form and validating some data on change/blur.

And often you’ll find that your data from promises, observables and signals need to interact with each other, which can be annoying.

Fortunately the situation with signals and their async usage is improving, and iirc the Angular team wants to make rxjs optional, but until it is Angular can be a confusing mess on some points.

I partially agree, there is an overlap between signals and rxjs, however the core business is different- observables are about data manipulation, while signals are about efficient state management.

Regarding angular I agree, rxjs was a bad choice for data management, and before signals arrived I abandoned rxjs in favor of mobx in my angular projects. However you could roll your own http client, we used axios, and using DI it’s a drop in replacement.

> Observables - streams

> Signals - reactivity

The r in rx stands for reactive.

The react in react stands for reactivity, however it is not.
React reacts to changes in state or properties by automatically updating the UI. What's not reactive about that?
As of v21, zoneless is the default

https://angular.love/angular-21-whats-new

Nice
The problem with Angular is that the http client service used to return observables by default and that made people think that you had to use them as such. It was a mostly useless, massive pain. Working with Angular became a pleasure the moment we decided to just cast our service calls to promises.

For the rest, RxJS is cool where you actually need it and want it.

Agree. RxJS is a beast to approach at first but it's a genuinely cool library, as long as you don't spread observable around when you don't actually need them. I used the same approach for a few years (pushing my http calls behind domain-specific api services that only return promise), and it's way simpler to handle.

I still use RxJS, but mostly in the top-level component and/or service who orchestrate between data, url state and api responses. Those top-level page usually keep the default change detection instead of the 'on-push' strategy).

I never understood the problem with the rxjs, its a challenge to learn for those not used to the pattern but its very nice.

Regardless signals is also fine, we have ways now to interop between rxjs to signal for those looking for it:

https://angular.dev/api/core/rxjs-interop/toSignal

Personally the http client workflow is fine. Usually lives in a service and exposes the needed values in any form we want.

Everything is signals now.