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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user