| ▲ | josephg 14 hours ago | ||||||||||||||||
> and why all modern native UI frameworks have a similar model these days. Personally I much rather the approach taken by solidjs / svelte. React’s approach is very inefficient - the entire view tree is rerendered when any change happens. Then they need to diff the new UI state with the old state and do reconciliation. This works well enough for tiny examples, but it’s clunky at scale. And the code to do diffing and reconciliation is insanely complicated. Hello world in react is like 200kb of javascript or something like that. (Smaller gzipped, but the browser still needs to parse it all at startup). And all of that diffing is also pure overhead. It’s simply not needed. The solidjs / react model uses the compiler to figure out how variables changing results in changes to the rendered view tree. Those variables are wrapped up as “observed state”. As a result, you can just update those variables and exactly and only the parts of the UI that need to be changed will be redrawn. No overrendering. No diffing. No virtual Dom and no reconciliation. Hello world in solid or svelte is minuscule - 2kb or something. Unfortunately, swiftui has copied react. And not the superior approach of newer libraries. The rust “Leptos” library implements this same fine grained reactivity, but it’s still married to the web. I’m really hoping someone takes the same idea and ports it to desktop / native UI. | |||||||||||||||||
| ▲ | danabramov 7 hours ago | parent | next [-] | ||||||||||||||||
>React’s approach is very inefficient - the entire view tree is rerendered when any change happens. That's not true. React only re-renders down from where the update happens. And it skips over stuff that is provably unchanged -- which, fair, involves manual memoization hints. Although with React Compiler it's actually pretty good at automatically adding those so in practice it mostly re-renders along the actually changed path. >And the code to do diffing and reconciliation is insanely complicated. It's really not, the "diffing" is relatively simple and is maybe ~2kloc of repetitive functions (one per component kind) in the React source code. Most of complexity of React is elsewhere. >The solidjs / react model uses the compiler to figure out how variables changing results in changes to the rendered view tree. I actually count those as "React-like" because it's still declarative componentized top-down model unlike say VB6. | |||||||||||||||||
| |||||||||||||||||
| ▲ | c-hendricks 8 hours ago | parent | prev | next [-] | ||||||||||||||||
Sure but the parents point was more about declarative UIs than React. SolidJS and Svelte are declarative. | |||||||||||||||||
| ▲ | Philpax 9 hours ago | parent | prev [-] | ||||||||||||||||
Dioxus is halfway between React and Svelte, and is working on its own native renderer. Might be worth considering. | |||||||||||||||||