I’ve built some SPA applications with Vue/React (+React-Native for mobile) in the past. There were/are lots of stumbling blocks along the way and things are moving/changing very fast. Eventually you get used to the patterns and things do get easier if you make it to that point without losing all interest.
The whole experience made me interested in taking a look at Elm/ReasonML/PureScript, to see how the story differs on that side. Never got to that point though, as I’m quite happy with the current tools I use.
Take a look at StimulusJS + Turbolinks combo. They complement each other so well. I wasn’t very convinced at first by Stimulus, it didn’t seem powerful enough, but it proved to be more than enough for my needs.
Other options: Unpoly (glad that they’re working on dropping JQuery as a dependency), IntercoolerJS, Drab (Elixir-based).
Very excited about LiveView from the teasers showcased so far.