Procházet zdrojové kódy

refactor(hmr): simplify usage

Evan You před 6 roky
rodič
revize
36d77f9a9e
1 změnil soubory, kde provedl 12 přidání a 3 odebrání
  1. 12 3
      packages/runtime-core/src/hmr.ts

+ 12 - 3
packages/runtime-core/src/hmr.ts

@@ -41,7 +41,13 @@ interface HMRRecord {
 const map: Map<string, HMRRecord> = new Map()
 
 export function registerHMR(instance: ComponentInternalInstance) {
-  map.get(instance.type.__hmrId!)!.instances.add(instance)
+  const id = instance.type.__hmrId!
+  let record = map.get(id)
+  if (!record) {
+    createRecord(id, instance.type as ComponentOptions)
+    record = map.get(id)!
+  }
+  record.instances.add(instance)
 }
 
 export function unregisterHMR(instance: ComponentInternalInstance) {
@@ -60,9 +66,11 @@ function createRecord(id: string, comp: ComponentOptions): boolean {
 }
 
 function rerender(id: string, newRender?: RenderFunction) {
+  const record = map.get(id)
+  if (!record) return
   // Array.from creates a snapshot which avoids the set being mutated during
   // updates
-  Array.from(map.get(id)!.instances).forEach(instance => {
+  Array.from(record.instances).forEach(instance => {
     if (newRender) {
       instance.render = newRender
     }
@@ -75,7 +83,8 @@ function rerender(id: string, newRender?: RenderFunction) {
 }
 
 function reload(id: string, newComp: ComponentOptions) {
-  const record = map.get(id)!
+  const record = map.get(id)
+  if (!record) return
   // 1. Update existing comp definition to match new one
   const comp = record.comp
   Object.assign(comp, newComp)