It's easy to make your own SPA using div display: none/block, so is routing. Global store is also pretty easy to do including update events. Async/await makes backend calls super simple, one could still use promises for a few more advanced cases as well, or even go full Saga pattern. Why is a framework needed these days?
There is no framework. Just simple JS calls and bindings to HTML with somebody defining REST or GraphQL backend. And some eye candy CSS. The point is that with ES7+ JS can be finally readable and not a spaghetti code monster so anyone can easily understand and extend any code.
I was involved with some deep React apps that utilized all kinds of advanced patterns and I simply don't see the need for most apps I see around. React is neat if you have thousands of concurrent updates coming in all the time where dependency graph is a killer. But only a few companies need it - why then force this on all frontend devs by default? It's like with big data - let's push everything to Hadoop/Spark when our SQL database fits into 20MB etc.