diff --git a/.changeset/wise-otters-swim.md b/.changeset/wise-otters-swim.md new file mode 100644 index 000000000000..2a5d4370f708 --- /dev/null +++ b/.changeset/wise-otters-swim.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[fix] avoid unnecessary $page store updates diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 69fb5e4f1481..ddc3a32c3272 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -467,7 +467,7 @@ export function create_client({ target, base }) { !current.url || url.href !== current.url.href || current.error !== error || - form !== undefined || + (form !== undefined && form !== page.form) || data_changed; if (page_changed) { diff --git a/packages/kit/src/runtime/client/types.d.ts b/packages/kit/src/runtime/client/types.d.ts index b1bea7c13ea4..e72213822ac6 100644 --- a/packages/kit/src/runtime/client/types.d.ts +++ b/packages/kit/src/runtime/client/types.d.ts @@ -26,7 +26,7 @@ export interface Client { // private API _hydrate(opts: { status: number; - error: App.Error; + error: App.Error | null; node_ids: number[]; params: Record; route: { id: string | null }; diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 851c1b04c4ca..35a75d1c6d56 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -158,7 +158,7 @@ export async function render_response({ /** @param {string} path */ const prefixed = (path) => (path.startsWith('/') ? path : `${assets}/${path}`); - const serialized = { data: '', form: 'null' }; + const serialized = { data: '', form: 'null', error: 'null' }; try { serialized.data = `[${branch @@ -196,6 +196,10 @@ export async function render_response({ serialized.form = uneval_action_response(form_value, /** @type {string} */ (event.route.id)); } + if (error) { + serialized.error = devalue.uneval(error); + } + if (inline_styles.size > 0) { const content = Array.from(inline_styles.values()).join('\n'); @@ -256,17 +260,14 @@ export async function render_response({ const hydrate = [ `node_ids: [${branch.map(({ node }) => node.index).join(', ')}]`, `data: ${serialized.data}`, - `form: ${serialized.form}` + `form: ${serialized.form}`, + `error: ${serialized.error}` ]; if (status !== 200) { hydrate.push(`status: ${status}`); } - if (error) { - hydrate.push(`error: ${devalue.uneval(error)}`); - } - if (options.embedded) { hydrate.push(`params: ${devalue.uneval(event.params)}`, `route: ${s(event.route)}`); }