diff --git a/packages/vue-app/template/client.js b/packages/vue-app/template/client.js index 404517bc99c7..a5dad3d7ea93 100644 --- a/packages/vue-app/template/client.js +++ b/packages/vue-app/template/client.js @@ -818,8 +818,8 @@ function addHotReload ($component, depth) { router.beforeEach(loadAsyncComponents.bind(_app)) router.beforeEach(render.bind(_app)) - // If page already is server rendered - if (NUXT.serverRendered) { + // If page already is server rendered and it was done on the same route path as client side render + if (NUXT.serverRendered && NUXT.routePath === _app.context.route.path) { mount() return } diff --git a/packages/vue-app/template/server.js b/packages/vue-app/template/server.js index 5e362b327455..4e05b54a41ff 100644 --- a/packages/vue-app/template/server.js +++ b/packages/vue-app/template/server.js @@ -72,10 +72,12 @@ export default async (ssrContext) => { // Used for beforeNuxtRender({ Components, nuxtState }) ssrContext.beforeRenderFns = [] // Nuxt object (window{{globals.context}}, defaults to window.__NUXT__) - ssrContext.nuxt = { <% if (features.layouts) { %>layout: 'default', <% } %>data: [], <% if (features.fetch) { %>fetch: [], <% } %>error: null<%= (store ? ', state: null' : '') %>, serverRendered: true } + ssrContext.nuxt = { <% if (features.layouts) { %>layout: 'default', <% } %>data: [], <% if (features.fetch) { %>fetch: [], <% } %>error: null<%= (store ? ', state: null' : '') %>, serverRendered: true, routePath: '' } // Create the app definition and the instance (created for each request) const { app, router<%= (store ? ', store' : '') %> } = await createApp(ssrContext) const _app = new Vue(app) + // Add ssr route path to nuxt context so we can account for page navigation between ssr and csr + ssrContext.nuxt.routePath = app.context.route.path <% if (features.meta) { %> // Add meta infos (used in renderer.js)