Переглянути джерело

refactor(hmr): simplify usage

Evan You 6 роки тому
батько
коміт
36d77f9a9e
1 змінених файлів з 12 додано та 3 видалено
  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)