What makes SPAs compelling is their tolerance to the latency. It's always possible to add a spinner, cache the state and cover backend deficiencies this way. It sounds just right, but at the same time what you really want to provide is a really slick experience to the user. When stated this way, any big latency should instead be exposed to force developers to act on it.
However, when the latency is always under control, it's very possible to use old school methods with page refresh which is less complex and allows to use the full power of libraries and resources on the backend