Halving spent a fair bit of time with Vue2/3 and coming from a Python background. I think to some extent the Vue2 to 3 transition is quite a bit like the Python 2 to 3 transition. It’s a big change, some controversial decisions, and the ecosystem is taking quite a while to catch up. However just like Python 3, Vue 3 is a massive improvement, I love the new competition api. I think it’s a great success and they made the right decision to push through with it.
We know you meant "composition api" but while I agree there are some good improvements sprinkled in Vue 3, I deeply lament now that we have literally two core competing APIs -- the classic "options" api, and the newer "composition" api.
Now when starting a new project there has to be a debate. Some people will advocate for trying the new thing, and as many others will be more conservative.
Worse, within a project there is now opportunity for competing technical approaches allover everywhere.
To be fair, React has been pulling this type of thing version after version. It seems like we MIGHT be settling on functions and hooks now, but only time will tell.
The real kicker would be if they removed the options API, for small components, it's all you need and I find prototyping with it easier than the composition API. So I for one am hoping they don't drop support for it in Vue 4!
React does the same in fact, and its documentation for class-based and hooks-based are not up to date last time I checked. I would rather having two clearly separated but documented options in vue3(class-based vs functional-based), instead of React's "we're mostly likely just use hooks alone in the future but oops our documentation is pretty much still non-hooks yet".
I think the trouble is that due to changing how reactivity works in Vue3, really it’s a completely new framework that just looks quite like Vue2. I don't think they could have made the changes in a phased way, it’s a kind of all or nothing situation.
This time last year I helped with adding Vue3 support to the TipTap editor and went headfirst into Vue3s internals. It’s a completely different machine.
Vue3s changes to its reactivity system is like Python 3s change to make strings Unicode.
I can't say I disagree, vue3 felt like a react metoo-release, and now it looks like some features are temporary deadends requiring more tricks to manage.
In some ways, Vue is a victim of its own success. I enjoy working with Vue and will continue to support the framework as the transition to version 3 continues. Ultimately, tough choices need to made and I understand the pushback from long-time users that depend on older features. (I use the term "old" loosely, since time and legacy in the front-end JS is skewed.) Like Python 3, the essence of Vue remains in Vue 3 and the framework will move on.