Skip to content

Commit debae9a

Browse files
authored
[fix] load function should not leak props (#2356)
1 parent fe642d2 commit debae9a

File tree

6 files changed

+45
-1
lines changed

6 files changed

+45
-1
lines changed

.changeset/polite-elephants-care.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
[fix] load function should not leak props to other components

packages/kit/src/runtime/client/renderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ export class Renderer {
404404

405405
for (let i = 0; i < filtered.length; i += 1) {
406406
const loaded = filtered[i].loaded;
407-
if (loaded) result.props[`props_${i}`] = await loaded.props;
407+
result.props[`props_${i}`] = loaded ? await loaded.props : null;
408408
}
409409

410410
if (

packages/kit/test/apps/basics/src/routes/load/_tests.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,12 @@ export default function (test, is_dev) {
231231
assert.equal(await page.innerHTML('.parsed'), '{"oddly":{"formatted":"json"}}');
232232
assert.equal(await page.innerHTML('.raw'), '{ "oddly" : { "formatted" : "json" } }');
233233
});
234+
235+
test('does not leak props to other pages', '/load/props/about', async ({ page, clicknav }) => {
236+
assert.equal(await page.textContent('p'), 'Data: undefined');
237+
await clicknav('[href="/load/props/"]');
238+
assert.equal(await page.textContent('p'), 'Data: Hello from Index!');
239+
await clicknav('[href="/load/props/about"]');
240+
assert.equal(await page.textContent('p'), 'Data: undefined');
241+
});
234242
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<header>
2+
<nav>
3+
<a href="/load/props/">Index</a>
4+
<a href="/load/props/about">About</a>
5+
</nav>
6+
</header>
7+
8+
<main>
9+
<slot />
10+
</main>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
export let data = 'undefined';
3+
</script>
4+
5+
<h3>About</h3>
6+
7+
<p>Data: {data}</p>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<script context="module">
2+
export async function load() {
3+
const data = 'Hello from Index!';
4+
return { props: { data } };
5+
}
6+
</script>
7+
8+
<script>
9+
export let data = 'undefined';
10+
</script>
11+
12+
<h3>Index</h3>
13+
14+
<p>Data: {data}</p>

0 commit comments

Comments
 (0)