Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8aa3714

Browse files
authored
fix(runtime-vapor): handle css vars work with empty VaporFragment (#14268)
close #14266
1 parent f9e87ce commit 8aa3714

3 files changed

Lines changed: 54 additions & 3 deletions

File tree

‎packages/runtime-vapor/__tests__/helpers/useCssVars.spec.ts‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
VaporTeleport,
33
createComponent,
4+
createFor,
45
createIf,
56
createPlainElement,
67
defineVaporComponent,
@@ -410,4 +411,48 @@ describe('useVaporCssVars', () => {
410411

411412
expect(colorInOnMount).toBe(`red`)
412413
})
414+
415+
test('work with v-if false', () => {
416+
const state = reactive({ color: 'red' })
417+
const root = document.createElement('div')
418+
419+
define({
420+
setup() {
421+
useVaporCssVars(() => state)
422+
return createIf(
423+
() => false,
424+
() => {
425+
const n2 = template('<div class="red">Hi</div>')()
426+
return n2
427+
},
428+
null as any,
429+
true,
430+
)
431+
},
432+
}).render({}, root)
433+
434+
expect(root.innerHTML).toBe(`<!--if-->`)
435+
})
436+
437+
test('work with empty v-for', () => {
438+
const state = reactive({ color: 'red' })
439+
const root = document.createElement('div')
440+
441+
define({
442+
setup() {
443+
useVaporCssVars(() => state)
444+
return createFor(
445+
// empty source
446+
() => [],
447+
item => {
448+
return template('<div class="red">Hi</div>')()
449+
},
450+
undefined,
451+
4,
452+
)
453+
},
454+
}).render({}, root)
455+
456+
expect(root.innerHTML).toBe(`<!--for-->`)
457+
})
413458
})

‎packages/runtime-vapor/src/apiCreateIf.ts‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from './insertionState'
99
import { renderEffect } from './renderEffect'
1010
import { DynamicFragment } from './fragment'
11+
import { createComment, createTextNode } from './dom/node'
1112

1213
export function createIf(
1314
condition: () => any,
@@ -22,7 +23,11 @@ export function createIf(
2223

2324
let frag: Block
2425
if (once) {
25-
frag = condition() ? b1() : b2 ? b2() : []
26+
frag = condition()
27+
? b1()
28+
: b2
29+
? b2()
30+
: [__DEV__ ? createComment('if') : createTextNode()]
2631
} else {
2732
frag =
2833
isHydrating || __DEV__ ? new DynamicFragment('if') : new DynamicFragment()

‎packages/runtime-vapor/src/helpers/useCssVars.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ function resolveParentNode(block: Block): Node {
2323
if (block instanceof Node) {
2424
return block.parentNode!
2525
} else if (isArray(block)) {
26-
return resolveParentNode(block[0])
26+
// Use the last element, so ForFragment will use the anchor
27+
return resolveParentNode(block[block.length - 1])
2728
} else if (isVaporComponent(block)) {
2829
return resolveParentNode(block.block!)
2930
} else {
30-
return resolveParentNode(block.nodes)
31+
return resolveParentNode(block.anchor || block.nodes)
3132
}
3233
}
3334

0 commit comments

Comments
 (0)