I will address these with respect to domvm [1]
> What about state within a component? How do you encapsulate that state so that other components can't muck with it?
Solved.
> What about passing data to that component?
Solved.
> What about type checking that data passed in in debug mode?
Could be solved if i rewrote in TypeScript. But this has never been a problematic issue in 10k+ LOC apps.
> What about a formal API for components to talk to one another?
Yep.
> What about knowing the explicit amount of the view tree that needs to be re-rendered based on what data changed?
Obviously, that's what virtual dom is.
In addition to all of this and much more, materialized views are independently refreshable, can be composed between disjoint components. There are async lifecycle hooks, a router, mutation observers, ajax sugar.
All of it is 17k min, requires no special tooling or IDE to write, is isomorphic and is 2-3x faster than React.
I have no doubt that React brings a lot to the table, but I hesitate to treat it as the final word in frontend frameworks for all the above reasons.
[1] https://github.com/leeoniya/domvm