Skip to content

Commit 9a2e583

Browse files
Doctor-wusxzz
authored andcommitted
feat(runtime-vapor): simplify code
1 parent f17a0ce commit 9a2e583

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

Diff for: packages/runtime-vapor/src/componentSlots.ts

+24-21
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function initSlots(
5252

5353
instance.slots = shallowReactive({})
5454
const renderedSlotKeys: Set<string>[] = []
55-
const slotNameLevels: Record<string, [number, Slot][]> = {}
55+
const slotsQueue: Record<string, [number, Slot][]> = {}
5656
rawSlots.forEach((slots, index) => {
5757
const isDynamicSlot = isDynamicSlotFn(slots)
5858
if (isDynamicSlot) {
@@ -61,17 +61,20 @@ export function initSlots(
6161
renderedSlotKeys[index] || (renderedSlotKeys[index] = new Set())
6262
let dynamicSlot: ReturnType<DynamicSlotFn>
6363
dynamicSlot = slots()
64-
const restoreKeys = cleanupSlot(index)
64+
const restoreSlotNames = cleanupSlot(index)
6565
if (isArray(dynamicSlot)) {
6666
for (const slot of dynamicSlot) {
6767
registerSlot(slot.name, slot.fn, index, renderedKeys)
6868
}
6969
} else if (dynamicSlot) {
7070
registerSlot(dynamicSlot.name, dynamicSlot.fn, index, renderedKeys)
7171
}
72-
if (restoreKeys.length) {
73-
for (const key of restoreKeys) {
74-
resolveSlot(key, slotNameLevels[key][0][1])
72+
if (restoreSlotNames.length) {
73+
for (const key of restoreSlotNames) {
74+
const [restoreLevel, restoreFn] = slotsQueue[key][0]
75+
renderedSlotKeys[restoreLevel] &&
76+
renderedSlotKeys[restoreLevel].add(key)
77+
resolveSlot(key, restoreFn)
7578
}
7679
}
7780
for (const name of renderedKeys) {
@@ -93,22 +96,22 @@ export function initSlots(
9396
})
9497

9598
function cleanupSlot(level: number) {
96-
const restoreKeys: string[] = []
97-
Object.keys(slotNameLevels).forEach(key => {
98-
const index = slotNameLevels[key].findIndex(([l]) => l === level)
99+
const restoreSlotNames: string[] = []
100+
Object.keys(slotsQueue).forEach(slotName => {
101+
const index = slotsQueue[slotName].findIndex(([l]) => l === level)
99102
if (index > -1) {
100-
slotNameLevels[key].splice(index, 1)
101-
if (!slotNameLevels[key].length) {
102-
delete slotNameLevels[key]
103+
slotsQueue[slotName].splice(index, 1)
104+
if (!slotsQueue[slotName].length) {
105+
delete slotsQueue[slotName]
103106
return
104107
}
105108
if (index === 0) {
106-
renderedSlotKeys[level] && renderedSlotKeys[level].delete(key)
107-
restoreKeys.push(key)
109+
renderedSlotKeys[level] && renderedSlotKeys[level].delete(slotName)
110+
restoreSlotNames.push(slotName)
108111
}
109112
}
110113
})
111-
return restoreKeys
114+
return restoreSlotNames
112115
}
113116

114117
function registerSlot(
@@ -117,17 +120,17 @@ export function initSlots(
117120
level: number,
118121
renderedKeys?: Set<string>,
119122
) {
120-
slotNameLevels[name] = slotNameLevels[name] || []
121-
slotNameLevels[name].push([level, fn])
122-
slotNameLevels[name].sort((a, b) => b[0] - a[0])
123-
for (let i = 1; i < slotNameLevels[name].length; i++) {
124-
const hidenLevel = slotNameLevels[name][i][0]
123+
slotsQueue[name] = slotsQueue[name] || []
124+
slotsQueue[name].push([level, fn])
125+
slotsQueue[name].sort((a, b) => b[0] - a[0])
126+
if (slotsQueue[name][1]) {
127+
const hidenLevel = slotsQueue[name][1][0]
125128
renderedSlotKeys[hidenLevel] && renderedSlotKeys[hidenLevel].delete(name)
126129
}
127-
if (slotNameLevels[name][0][0] === level) {
130+
if (slotsQueue[name][0][0] === level) {
128131
renderedKeys && renderedKeys.add(name)
129132
}
130-
resolveSlot(name, slotNameLevels[name][0][1])
133+
resolveSlot(name, slotsQueue[name][0][1])
131134
}
132135

133136
function resolveSlot(name: string, fn: Slot) {

0 commit comments

Comments
 (0)