Skip to content

Commit a756a1b

Browse files
committed
fix for page loading from history initially instead of server
1 parent 729a4d6 commit a756a1b

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

packages/core/src/history.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class History {
1111
public preserveUrl = false
1212
protected current: Partial<Page> = {}
1313
protected queue: (() => Promise<void>)[] = []
14+
// We need initialState for `restore`
15+
protected initialState: Partial<Page> | null = null
1416

1517
public remember(data: unknown, key: string): void {
1618
this.replaceState({
@@ -24,7 +26,7 @@ class History {
2426

2527
public restore(key: string): unknown {
2628
if (!isServer) {
27-
return this.getState<{ [key: string]: any }>(this.rememberedState, {})?.[key]
29+
return this.initialState?.[this.rememberedState]?.[key]
2830
}
2931
}
3032

@@ -77,7 +79,11 @@ class History {
7779
throw new Error('Unable to decrypt history')
7880
}
7981

80-
this.current = data ?? {}
82+
if (this.initialState === null) {
83+
this.initialState = data ?? undefined
84+
} else {
85+
this.current = data ?? {}
86+
}
8187

8288
return data
8389
})

tests/deferred-props.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,29 @@ test('can load deferred props', async ({ page }) => {
3636
await expect(page.getByText('qux value')).toBeVisible()
3737
await expect(page.getByText('both baz value and qux value')).toBeVisible()
3838
})
39+
40+
test('we are not caching deferred props after reload', async ({ page }) => {
41+
await page.goto('/deferred-props/page-1')
42+
43+
await expect(page.getByText('Loading foo...')).toBeVisible()
44+
await expect(page.getByText('Loading bar...')).toBeVisible()
45+
46+
await page.waitForResponse(page.url())
47+
48+
await expect(page.getByText('Loading foo...')).not.toBeVisible()
49+
await expect(page.getByText('Loading bar...')).not.toBeVisible()
50+
await expect(page.getByText('foo value')).toBeVisible()
51+
await expect(page.getByText('bar value')).toBeVisible()
52+
53+
await page.reload()
54+
55+
await expect(page.getByText('Loading foo...')).toBeVisible()
56+
await expect(page.getByText('Loading bar...')).toBeVisible()
57+
58+
await page.waitForResponse(page.url())
59+
60+
await expect(page.getByText('Loading foo...')).not.toBeVisible()
61+
await expect(page.getByText('Loading bar...')).not.toBeVisible()
62+
await expect(page.getByText('foo value')).toBeVisible()
63+
await expect(page.getByText('bar value')).toBeVisible()
64+
})

0 commit comments

Comments
 (0)