Not to toot our own horn, but I wanted remark on how similar the issues we have had to deal with in our own framework (https://qbix.com/platform), since 2011.
When we built it, we had out of the box:
+ Tools (our name for components)
+ Pages (to support all web standards)
You place tools on pages, the framework does the rest:
+ It loads JS and CSS on demand
+ It adds/removes tools from pages automatically as you navigate
+ Support for web standards, HTML5 history w fallbacks, etc.
+ Tools can contain other tools
+ You have events for when all parent tools have activated (onActivate) and when all child tools activated (onInit)
+ JS and CSS had to be namespaced by convention from day 1, by module and tool name.
We use events instead of virtual DOM. We didn't use fancy JSX or preprocessors to do it. It's all written in ES4 JS and runs on every modern browser and IE8.
When we built it, we had out of the box:
+ Tools (our name for components)
+ Pages (to support all web standards)
You place tools on pages, the framework does the rest:
+ It loads JS and CSS on demand
+ It adds/removes tools from pages automatically as you navigate
+ Support for web standards, HTML5 history w fallbacks, etc.
+ Tools can contain other tools
+ You have events for when all parent tools have activated (onActivate) and when all child tools activated (onInit)
+ JS and CSS had to be namespaced by convention from day 1, by module and tool name.
We use events instead of virtual DOM. We didn't use fancy JSX or preprocessors to do it. It's all written in ES4 JS and runs on every modern browser and IE8.
But the problems are very similar in scope.