Hacker News new | ask | show | jobs
by halflife 8 days ago
The react in react stands for reactivity, however it is not.
1 comments

React reacts to changes in state or properties by automatically updating the UI. What's not reactive about that?
Its entire state management is not reactive, it’s always on push, not pull. You always need to call setState to get render changes.
But why is push vs pull the definition of reactivity?

I suppose we can say that there are different kinds of reactivity. Signals is one kind. Observables à la rxjs is a different kind (the whole model of programming with rxjs was referred to as "functional reactive programming"). Observables are push-based. Signals, as I heard, are a more complex primitive, which, under the hood, is push-pull.

React's reactivity model may be crap; but this doesn't make it non-existent.

Maybe push pull wasn’t the best metaphor, but the point is that everything can be reactive, it only depends on how much boilerplate you need to write to achieve the desired result.

Since react doesn’t have a true reactive model, you need to subscribe to changes manually (use effect) to create computations, while in signals it’s a primitive (computed).

I actually created a lib that operates signals over reacts state management (https://roypeled.github.io/react-logic/), so I removed the boilerplate to create a true reactive system.

If you want, you can create reactive system just from JS primitives, using callbacks. But that doesn’t make JS reactive by nature.

> you need to subscribe to changes manually (use effect) to create computations

How do you mean? Since the render function reruns during every update to state/props, derived/computed values can be calculated from the updated state/props during rendering.

When all you need is a synchronous operations, yes. When it involves async, batching, buffering, and user input, it becomes much more complicated, and every step needs to be setup manually.
UI is reactive, not state. You push changes to state and UI reacts to it.
A derived state is certainly reactive.
Of course you can have reactive state, your complaint however was:

"The react in react stands for reactivity, however it is not." [because] "Its entire state management is not reactive"

React is primarily an UI library, not full state management library. And its UI is reactive.

Agreed, the OP said that the r in rxjs stands for reactivity, so my point was the the names have little bearing on the actual design patterns achieved with the libs