I used to use React (0.13–0.14, late 2015) and got frustrated by everything it brought forth to us from the component lifecycles to refs to props & states to the then-inability to return arrays from a single component to mixins & high-order components to the then-difficulty of creating portals (or as I called them, displaced elements…) to webpack configurations to asynchronously loaded components to Invariant errors to…
Then, in my second single-page application (Ionic 2 hybrid app, late 2016-early 2017, Angular 2 Beta-2.0), I again got frustrated by all the troubles it brought forth to us, from bugs in beta and RC versions to incompatibilities among betas and between betas and RCs and between RCs and the stable to TypeScript and NGC errors (like
TypeError: cannot read property 'kind' of undefined) to copying component definitions to modules to selector priority wars to webpack configurations causing
evals in packaged code to duplicate identifiers to…
Now I am working on my third (excluding test projects like TodoMVCs, that is) single-page application. I use a customized version of HyperApp and good old jQuery, together with my own previously-written routing and module-loading (AMD) libraries. I write JSX and use babel with good old gulp to build. No longer component states. No longer compile-time errors that are not from my own code. I use a single instance for displaced elements like dialogs, and another for the loading indicator. No longer selector priority wars due to my following the BEM style. No longer never-understood webpack configurations. It is also very easy for one to figure out how to dynamically load components.
I am using HyperApp. And I love it.