Skip to content

Commit 714151e

Browse files
authored
fix(hmr): preserve appContext on root HMR reload (#14528)
1 parent 91f1483 commit 714151e

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

packages/runtime-vapor/__tests__/hmr.spec.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
computed,
44
createApp,
55
h,
6+
inject,
67
nextTick,
78
onActivated,
89
onDeactivated,
@@ -17,6 +18,7 @@ import {
1718
createComponent,
1819
createSlot,
1920
createTemplateRefSetter,
21+
createVaporApp,
2022
defineVaporAsyncComponent,
2123
defineVaporComponent,
2224
delegateEvents,
@@ -178,6 +180,39 @@ describe('hot module replacement', () => {
178180
expect(mountSpy).toHaveBeenCalledTimes(1)
179181
})
180182

183+
test('reload root vapor component should preserve appContext provide/inject', async () => {
184+
const root = document.createElement('div')
185+
const appId = 'test-root-reload-app-context'
186+
187+
const Child = defineVaporComponent({
188+
setup() {
189+
const msg = inject('msg')
190+
return { msg }
191+
},
192+
render: compileToFunction(`<div>{{ msg }}</div>`),
193+
})
194+
195+
const App = defineVaporComponent({
196+
__hmrId: appId,
197+
render: () => createComponent(Child),
198+
})
199+
createRecord(appId, App as any)
200+
201+
const app = createVaporApp(App)
202+
app.provide('msg', 'app-injected')
203+
app.mount(root)
204+
expect(root.innerHTML).toBe(`<div>app-injected</div>`)
205+
206+
reload(appId, {
207+
__vapor: true,
208+
__hmrId: appId,
209+
render: () => createComponent(Child),
210+
})
211+
212+
await nextTick()
213+
expect(root.innerHTML).toBe(`<div>app-injected</div>`)
214+
})
215+
181216
test('reload KeepAlive slot', async () => {
182217
const root = document.createElement('div')
183218
document.body.appendChild(root)

packages/runtime-vapor/src/hmr.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ export function hmrReload(
5151
instance.rawProps,
5252
instance.rawSlots,
5353
instance.isSingleRoot,
54+
undefined,
55+
instance.appContext,
5456
)
5557
setCurrentInstance(...prev)
5658
mountComponent(newInstance, parent, anchor)

0 commit comments

Comments
 (0)