# Angular vs React vs Vue

For a software course about rich client Javascript applications we want students to be able to choose what framework they will use. Now to give us a little bit of control we want them to be able to choose from Vue.js, React or Angular. As far as I can see Angular and React are both almost equal in technical complexity. But Vue.Js, although it's very popular, seems more flat and shallow.

We want to test students if they are able to build a solution that is:

• Modular (components, modules, etc)
• Has complex user interaction
• Is tested via unit test and UI testing
• Follows the separation of concern principle

My question: Can Vue.JS compete with Angular and React based on the criteria listed above?

• The perceived flatness/shallowness of Vue might be a bonus for your purposes. With a smaller but more streamlined tool, students are less likely to get lost in the intricacies of the tool itself and thus be more able to focus on what you are trying to teach. – John Coleman Feb 15 '19 at 11:17
• While I can completely understand not wanting to set your students up for failure with a subpar framework, 50-60 minutes with any of those (or any ones not on your list for that matter) should tell them (or you!) real quick whether or not it will cut the mustard for their purposes (or is suited to them personally: I fell in love with React immediately and to this day still cannot force myself to make a non-toy Angular app). – Jared Smith Feb 15 '19 at 16:48

Yes, from my experience it can.

Regarding modular programming: Vue is rather similar to React in this matter.

Components can be created and treated rather similarly to the way one treats React.Component objects. While the two frameworks are different, the mindset for dealing with components is essentially the same.

This means that user interactions are also somewhat identical. I'm not entirely sure what you mean by "complex", but these Vue components can handle events (such as clicking etc.)

As for unit testing, well: Their guide page does a better job at explaining than I do. Essentially, one can use Jasmine or other UnitTest frameworks, and the Vue instance is the mediator between regular ol' javascript, and the components you want to test.

This mediation by the Vue instance brings me to the final point: Vue doesn't exactly separate concerns in this regard. Most things are channeled through this instance. I haven't looked into it enough to be sure, but my guess is that it's more like a factory than a container for other things.
This would make it much more concern-separated. But again, Vue.js knows better than I do. A more in-depth explanation can be found in this medium.com post

So, while Vue might seem more shallow at first, I find that it isn't. It's just somewhat different than the other two, but more similar to React.