logoalt Hacker News

byearthithatiusyesterday at 1:01 AM2 repliesview on HN

I am probably just misguided but multiple things you say you "wouldn't call a reactivity engine" only exist to support updating DOM (reactivity) efficiently. So what would you call them? They only exist to update the DOM, which is itself the reactivity we all want. Technically you could just getElementById and update it, but react has what I call a whole "reactivity engine" to do it for you.


Replies

kaoDyesterday at 6:49 AM

Reactivity has a specific meaning in programming:

https://en.wikipedia.org/wiki/Reactive_programming

https://en.wikipedia.org/wiki/Functional_reactive_programmin...

Which I think React doesn't really fit. React is not about data streams, nor about inferred dependencies.

> Technically you could just getElementById and update it, but react has what I call a whole "reactivity engine" to do it for you.

I would call that "declarative", not "reactive".

https://en.wikipedia.org/wiki/Declarative_programming

The closest thing to reactivity React has are dependency arrays in `useCallback` but I'd say it's a stretch to call that reactive programming.

Compare it with SolidJS's data flow. https://docs.solidjs.com/ Also notice how "reactive" is all over their landing page while React doesn't mention "reactive" at all https://react.dev/

b_e_n_t_o_nyesterday at 3:27 AM

It might be more useful to think of React as having a very simple reactivity system. In essence it just compares state values by referential equality (===) and if they're different, rerenders the component. And that includes children. In order to optimise, you need to both maintain referential equality of objects across renders (i.e. don't recreate them each render) and then tell React to compare the props passed into components by said referential equality before rendering.

Whereas other frameworks have a full blown reactivity system with signals (basically implicit observables), so your state values are not just regular javascript objects but either proxies or some other object which can be tracked by access in components to update things granularly, eg. setting an elements innerText but automatically.