Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Minor nit, because this is one of my weird special interests: this (being render-agnostic) isn’t necessarily a property of React’s virtual DOM. It’s a property of JSX being explicitly specified without semantics.

For instance, Solid also supports custom JSX renderer, but doesn’t use a VDOM to achieve that.

I find it helpful to think of JSX as analogous to a macro (in the lispy sense of the term), except that its syntax and implementation are decoupled. Most compiler tooling assumes the implementation maps to a function call, but even that isn’t strictly required (and again, Solid is a counter example).



JSX gets compiled to a tree of function calls, but the hard part is done using react (or solid, or svelte, or ...) to hook in to the lifecycle of nodes in that tree.


Something I wish is that you could "render" JSX agnostically and just get a JSON data structure describing a tree of tags, which is not specific to the platform or even the framework, and then you could pass that off to whichever subsystem for whichever purpose (or even serialize it or send it over a wire). We wouldn't need separate build plugins for each JSX-using framework, you'd just pass them your data


Hello! One of the main challenges of figuring a JSX syntax out is what to do about the “children” prop.

Experientially, typescript still has a bit of trouble figuring out the right types for these nested structures. Even with a typed jsx function it sometimes doesn’t infer correctly, so providing plugin capability would take a very careful hand


You can build your own jsx renderer and get exactly that, it's not that difficult.


Right, but only with a custom transpilation step. It would be nice if there were only a single standard JSX transpilation that all the frameworks and platforms ingested the output of


It kinda is! The only difference between JSX transpiler outputs is the factory function (and the Fragment component). For React the factory function it's `React.createElement`, for Preact it's `h`.

Babel has a pragma property, and esbuild allows you to pass it in the command line: `--jsx-factory=h`.

https://esbuild.github.io/content-types/#auto-import-for-jsx


I knew it transpiled to a function call, though I didn't know babel lets you parameterize that without writing a custom plugin


JSX parameters aren’t necessarily serialisable though?


And JSX is not needed either, as seen with Threlte.

https://threlte.xyz/

When all you know is React, everything gets viewed through that limited lens.


Sheesh.

The point is about the declarative abstraction and how it's useful for people who don't know what "React Three" might entail, not to enumerate all the frameworks that have it under a submission about "React Three Ecosystem".




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: