mirror of https://github.com/vuejs/core.git
fix(hmr): avoid hydration for hmr root reload (#12450)
close vitejs/vite-plugin-vue#146 close vitejs/vite-plugin-vue#477
This commit is contained in:
parent
626450590d
commit
1f98a9c493
|
@ -1880,6 +1880,26 @@ describe('SSR hydration', () => {
|
||||||
expect(root.innerHTML).toBe('<div><div>bar</div></div>')
|
expect(root.innerHTML).toBe('<div><div>bar</div></div>')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('hmr root reload', async () => {
|
||||||
|
const appId = 'test-app-id'
|
||||||
|
const App = {
|
||||||
|
__hmrId: appId,
|
||||||
|
template: `<div>foo</div>`,
|
||||||
|
}
|
||||||
|
|
||||||
|
const root = document.createElement('div')
|
||||||
|
root.innerHTML = await renderToString(h(App))
|
||||||
|
createSSRApp(App).mount(root)
|
||||||
|
expect(root.innerHTML).toBe('<div>foo</div>')
|
||||||
|
|
||||||
|
reload(appId, {
|
||||||
|
__hmrId: appId,
|
||||||
|
template: `<div>bar</div>`,
|
||||||
|
})
|
||||||
|
await nextTick()
|
||||||
|
expect(root.innerHTML).toBe('<div>bar</div>')
|
||||||
|
})
|
||||||
|
|
||||||
describe('mismatch handling', () => {
|
describe('mismatch handling', () => {
|
||||||
test('text node', () => {
|
test('text node', () => {
|
||||||
const { container } = mountWithHydration(`foo`, () => 'bar')
|
const { container } = mountWithHydration(`foo`, () => 'bar')
|
||||||
|
|
|
@ -383,13 +383,12 @@ export function createAppAPI<HostElement>(
|
||||||
// HMR root reload
|
// HMR root reload
|
||||||
if (__DEV__) {
|
if (__DEV__) {
|
||||||
context.reload = () => {
|
context.reload = () => {
|
||||||
|
const cloned = cloneVNode(vnode)
|
||||||
|
// avoid hydration for hmr updating
|
||||||
|
cloned.el = null
|
||||||
// casting to ElementNamespace because TS doesn't guarantee type narrowing
|
// casting to ElementNamespace because TS doesn't guarantee type narrowing
|
||||||
// over function boundaries
|
// over function boundaries
|
||||||
render(
|
render(cloned, rootContainer, namespace as ElementNamespace)
|
||||||
cloneVNode(vnode),
|
|
||||||
rootContainer,
|
|
||||||
namespace as ElementNamespace,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue