-
Notifications
You must be signed in to change notification settings - Fork 0
/
for.go
39 lines (38 loc) · 883 Bytes
/
for.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package w
//go:noinline
func For[T any](getList func() []T, render func(T, int) *Ele) *Ele {
point := HPoint()
key, attrKey := RandomAttr()
last := 0
CreateEffect(func() {
now := getList()
if last == 0 {
eles := Document.QuerySelectorAll(attrKey)
for i := 0; i < len(eles); i++ {
eles[i].Remove()
}
for i, v := range now {
e := render(v, i).Attr(key, 1)
point.InsertAdjacentElement("beforebegin", e)
}
} else {
lenNow := len(now)
// 清空
if last < lenNow {
// 新增新的
for i := last; i < lenNow; i++ {
e := render(now[i], i).Attr(key, 1)
point.InsertAdjacentElement("beforebegin", e)
}
} else if last > lenNow {
// 更新删除多余的
eles := Document.QuerySelectorAll(attrKey)
for i := lenNow; i < len(eles); i++ {
eles[i].Remove()
}
}
}
last = len(now)
})
return point
}