refactor(hmr): simplify usage

This commit is contained in:
Evan You 2020-04-20 04:03:00 -04:00
parent 19223f5462
commit 36d77f9a9e

View File

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