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,
|
anchor: HostNode | null,
|
||||||
isSVG: boolean
|
isSVG: boolean
|
||||||
): HostElement
|
): HostElement
|
||||||
|
setStaticContent?(node: HostElement, content: string): void
|
||||||
}
|
}
|
||||||
|
|
||||||
// Renderer Node can technically be any object in the context of core renderer
|
// Renderer Node can technically be any object in the context of core renderer
|
||||||
@ -330,7 +331,8 @@ function baseCreateRenderer(
|
|||||||
nextSibling: hostNextSibling,
|
nextSibling: hostNextSibling,
|
||||||
setScopeId: hostSetScopeId = NOOP,
|
setScopeId: hostSetScopeId = NOOP,
|
||||||
cloneNode: hostCloneNode,
|
cloneNode: hostCloneNode,
|
||||||
insertStaticContent: hostInsertStaticContent
|
insertStaticContent: hostInsertStaticContent,
|
||||||
|
setStaticContent: hostSetStaticContent
|
||||||
} = options
|
} = options
|
||||||
|
|
||||||
// Note: functions inside this closure should use `const xxx = () => {}`
|
// Note: functions inside this closure should use `const xxx = () => {}`
|
||||||
@ -363,7 +365,13 @@ function baseCreateRenderer(
|
|||||||
case Static:
|
case Static:
|
||||||
if (n1 == null) {
|
if (n1 == null) {
|
||||||
mountStaticNode(n2, container, anchor, isSVG)
|
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
|
break
|
||||||
case Fragment:
|
case Fragment:
|
||||||
processFragment(
|
processFragment(
|
||||||
|
@ -69,3 +69,12 @@ export const nodeOps: Omit<RendererOptions<Node, Element>, 'patchProp'> = {
|
|||||||
return node
|
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