From 1f4fdee60a677c72865f2d9de5deb66be0eed8b4 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 15 Sep 2022 22:22:28 +0100 Subject: [PATCH 1/2] fix(nuxt): apply data/state from cache immediately before route resolves --- .../nuxt/src/app/plugins/payload.client.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/nuxt/src/app/plugins/payload.client.ts b/packages/nuxt/src/app/plugins/payload.client.ts index fb9d4c3ad03..1a41b33fdbc 100644 --- a/packages/nuxt/src/app/plugins/payload.client.ts +++ b/packages/nuxt/src/app/plugins/payload.client.ts @@ -1,4 +1,4 @@ -import { defineNuxtPlugin, loadPayload, addRouteMiddleware, isPrerendered } from '#app' +import { defineNuxtPlugin, loadPayload, isPrerendered, useRouter } from '#app' export default defineNuxtPlugin((nuxtApp) => { // Only enable behavior if initial page is prerendered @@ -6,17 +6,16 @@ export default defineNuxtPlugin((nuxtApp) => { if (!isPrerendered()) { return } - const prefetchPayload = async (url: string) => { - const payload = await loadPayload(url) + + // Load payload into cache + nuxtApp.hooks.hook('link:prefetch', to => loadPayload(to)) + + // Load payload after final route is resolved + useRouter().beforeResolve(async (to, from) => { + if (to.path === from.path) { return } + const payload = await loadPayload(to.path) if (!payload) { return } Object.assign(nuxtApp.payload.data, payload.data) Object.assign(nuxtApp.payload.state, payload.state) - } - nuxtApp.hooks.hook('link:prefetch', async (to) => { - await prefetchPayload(to) - }) - addRouteMiddleware(async (to, from) => { - if (to.path === from.path) { return } - await prefetchPayload(to.path) }) }) From 5a89c534715806a643692b86102ac1e33a674b19 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 16 Sep 2022 09:54:47 +0100 Subject: [PATCH 2/2] chore: update comment --- packages/nuxt/src/app/plugins/payload.client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/app/plugins/payload.client.ts b/packages/nuxt/src/app/plugins/payload.client.ts index 1a41b33fdbc..be0a711b713 100644 --- a/packages/nuxt/src/app/plugins/payload.client.ts +++ b/packages/nuxt/src/app/plugins/payload.client.ts @@ -10,7 +10,7 @@ export default defineNuxtPlugin((nuxtApp) => { // Load payload into cache nuxtApp.hooks.hook('link:prefetch', to => loadPayload(to)) - // Load payload after final route is resolved + // Load payload after middleware & once final route is resolved useRouter().beforeResolve(async (to, from) => { if (to.path === from.path) { return } const payload = await loadPayload(to.path)