Skip to content

Commit 3f480f2

Browse files
committed
fix effects cleanup
1 parent 2b5b0f2 commit 3f480f2

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

src/commit.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ export const commit = (fiber?: FiberFinish) => {
1111
const curnode = getChildNode(cur)
1212
const refnode = getChildNode(ref)
1313
if (op & TAG.INSERT || op & TAG.MOVE) {
14-
1514
parent.insertBefore(curnode, refnode)
1615
}
1716
if (op & TAG.REPLACE) {
1817
parent.replaceChild(curnode, refnode)
18+
removeElement(ref,false)
1919
}
2020
if (op & TAG.UPDATE) {
2121
const node = getChildNode(fiber)
@@ -65,13 +65,13 @@ const kidsRefer = (kids: Fiber[]) => {
6565
})
6666
}
6767

68-
export const removeElement = (fiber: Fiber) => {
68+
export const removeElement = (fiber: Fiber, flag: boolean = true) => {
6969
if (fiber.isComp) {
7070
fiber.hooks && fiber.hooks.list.forEach((e) => e[2] && e[2]())
71-
fiber.kids.forEach(removeElement as any)
71+
fiber.kids.forEach(v => removeElement(v, flag))
7272
} else {
7373
// @ts-expect-error
74-
fiber.parentNode.removeChild(fiber.node)
74+
if (flag) fiber.parentNode.removeChild(fiber.node)
7575
kidsRefer(fiber.kids)
7676
refer(fiber.ref, null)
7777
}

test/effect.tsx

+18-18
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ export const change = async t => {
3838
t.eq(effects, [])
3939
}
4040
},
41-
// {
42-
// content: <div>removed</div>,
43-
// test: () => {
44-
// t.eq(effects, ['cleanUp 1'])
45-
// }
46-
// }
41+
{
42+
content: <div>removed</div>,
43+
test: () => {
44+
t.eq(effects, ['cleanUp 1'])
45+
}
46+
}
4747
])
4848
}
4949

@@ -78,12 +78,12 @@ export const once = async (t) => {
7878
t.eq(effects, [])
7979
}
8080
},
81-
// {
82-
// content: <div>removed</div>,
83-
// test: () => {
84-
// t.eq(effects, ['cleanUp'])
85-
// }
86-
// }
81+
{
82+
content: <div>removed</div>,
83+
test: () => {
84+
t.eq(effects, ['cleanUp'])
85+
}
86+
}
8787
])
8888
}
8989

@@ -125,11 +125,11 @@ export const every = async t => {
125125
effects = []
126126
}
127127
},
128-
// {
129-
// content: <div>removed</div>,
130-
// test: () => {
131-
// t.eq(effects, ['cleanUp 2'])
132-
// }
133-
// }
128+
{
129+
content: <div>removed</div>,
130+
test: () => {
131+
t.eq(effects, ['cleanUp 2'])
132+
}
133+
}
134134
])
135135
}

0 commit comments

Comments
 (0)