fix(hmr): support hmr for static nodes
This commit is contained in:
parent
9f8ed4a9b5
commit
386b093554
@ -115,6 +115,7 @@ export interface RendererOptions<
|
||||
anchor: HostNode | null,
|
||||
isSVG: boolean
|
||||
): HostElement
|
||||
setStaticContent?(node: HostElement, content: string): void
|
||||
}
|
||||
|
||||
// Renderer Node can technically be any object in the context of core renderer
|
||||
@ -330,7 +331,8 @@ function baseCreateRenderer(
|
||||
nextSibling: hostNextSibling,
|
||||
setScopeId: hostSetScopeId = NOOP,
|
||||
cloneNode: hostCloneNode,
|
||||
insertStaticContent: hostInsertStaticContent
|
||||
insertStaticContent: hostInsertStaticContent,
|
||||
setStaticContent: hostSetStaticContent
|
||||
} = options
|
||||
|
||||
// Note: functions inside this closure should use `const xxx = () => {}`
|
||||
@ -363,7 +365,13 @@ function baseCreateRenderer(
|
||||
case Static:
|
||||
if (n1 == null) {
|
||||
mountStaticNode(n2, container, anchor, isSVG)
|
||||
} // static nodes are noop on patch
|
||||
} else if (__DEV__) {
|
||||
// static nodes are only patched during dev for HMR
|
||||
n2.el = n1.el
|
||||
if (n2.children !== n1.children) {
|
||||
hostSetStaticContent!(n2.el!, n2.children as string)
|
||||
}
|
||||
}
|
||||
break
|
||||
case Fragment:
|
||||
processFragment(
|
||||
|
@ -69,3 +69,12 @@ export const nodeOps: Omit<RendererOptions<Node, Element>, 'patchProp'> = {
|
||||
return node
|
||||
}
|
||||
}
|
||||
|
||||
if (__DEV__) {
|
||||
// __UNSAFE__
|
||||
// Reason: innerHTML.
|
||||
// same as `insertStaticContent`, but this is also dev only (for HMR).
|
||||
nodeOps.setStaticContent = (el, content) => {
|
||||
el.innerHTML = content
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user