this post was submitted on 29 Jun 2024
87 points (93.9% liked)
Programming
17318 readers
73 users here now
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities !webdev@programming.dev
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
I'm not saying to use native toolkits like Qt or GTK, those indeed have problems. What React Native does is somewhere in-between: it's an abstraction that produces decent results between platforms including the web.
It uses slightly higher level abstractions that work a lot like the web for rendering, you still get your boxes and a subset of CSS properties. But on web it'll compile to flexbox or grids, on Android it'll compile to something like a LinearLayout or some other kind of layout the OS understands. On web a
<Text>
will compile to a<span>
, on Android it'll compile to a native text element. On mobile where you need the performance the most, you otherwise end up rendering a web page that will then eventually end up doing the same thing back to display it natively, but with all the downsides of a web view.This performs way better with basically no downside for the web version, has the majority of the flexibility one needs for responsive layouts but it's way more lightweight when you do target native. On native you can just render it all yourself for really cheap, like any native toolkit would. You're your own toolkit.
They will never look native, but at least all the rendering will be native. Most companies have their custom UI theme anyway, native widgets rarely gets used anyway.
We're talking Electron replacement after all, it's not like apps made with it look anything native. But if at least they performed like native apps by skipping the web views and all the baggage it brings with it, that'd be great.
I know how React Native works and it doesn't fix anything. For example, if the underlying toolkit punishes you for deep nesting - you're still fucked. Google recommends to have 10 or less levels of nesting, which is bonkers to any web developer. There is similar advice for iOS, Mac and Windows (not sure about GTK and Qt, haven't used them for over a decade). Each platform has its own solution, so you end up with custom code for each and at that point or doesn't matter if you're coding in C or JS.