8
8
Fragment as Signal ,
9
9
SkipRender ,
10
10
Slot ,
11
+ _jsxSorted ,
11
12
component$ ,
12
13
h ,
13
14
jsx ,
@@ -28,7 +29,8 @@ import { QError } from '../shared/error/error';
28
29
import { ErrorProvider } from '../../testing/rendering.unit-util' ;
29
30
import * as qError from '../shared/error/error' ;
30
31
import { QContainerValue } from '../shared/types' ;
31
- import { QContainerAttr } from '../shared/utils/markers' ;
32
+ import { OnRenderProp , QContainerAttr } from '../shared/utils/markers' ;
33
+ import { vnode_getParent , vnode_getProp , vnode_locate } from '../client/vnode' ;
32
34
33
35
const debug = false ; //true;
34
36
Error . stackTraceLimit = 100 ;
@@ -2040,6 +2042,56 @@ describe.each([
2040
2042
) ;
2041
2043
} ) ;
2042
2044
2045
+ it ( 'should remove component with null key when it is compared with fragment with null key' , async ( ) => {
2046
+ const InnerCmp = component$ ( ( ) => {
2047
+ return < div > InnerCmp</ div > ;
2048
+ } ) ;
2049
+
2050
+ const Cmp = component$ ( ( ) => {
2051
+ const toggle = useSignal ( true ) ;
2052
+
2053
+ return (
2054
+ < >
2055
+ < button onClick$ = { ( ) => ( toggle . value = ! toggle . value ) } > </ button >
2056
+ { toggle . value ? (
2057
+ < InnerCmp key = { null } />
2058
+ ) : (
2059
+ < Fragment key = { null } >
2060
+ < h1 > Test</ h1 >
2061
+ </ Fragment >
2062
+ ) }
2063
+ </ >
2064
+ ) ;
2065
+ } ) ;
2066
+
2067
+ const { vNode, document, container } = await render ( < Cmp /> , { debug } ) ;
2068
+ expect ( vNode ) . toMatchVDOM (
2069
+ < Component ssr-required >
2070
+ < Fragment ssr-required >
2071
+ < button > </ button >
2072
+ < Component ssr-required >
2073
+ < div > InnerCmp</ div >
2074
+ </ Component >
2075
+ </ Fragment >
2076
+ </ Component >
2077
+ ) ;
2078
+ await trigger ( document . body , 'button' , 'click' ) ;
2079
+
2080
+ expect ( vNode ) . toMatchVDOM (
2081
+ < Component ssr-required >
2082
+ < Fragment ssr-required >
2083
+ < button > </ button >
2084
+ < Fragment ssr-required >
2085
+ < h1 > Test</ h1 >
2086
+ </ Fragment >
2087
+ </ Fragment >
2088
+ </ Component >
2089
+ ) ;
2090
+ const h1Element = vnode_locate ( container . rootVNode , document . querySelector ( 'h1' ) ! ) ;
2091
+
2092
+ expect ( vnode_getProp ( vnode_getParent ( h1Element ) ! , OnRenderProp , null ) ) . toBeNull ( ) ;
2093
+ } ) ;
2094
+
2043
2095
describe ( 'regression' , ( ) => {
2044
2096
it ( '#3643' , async ( ) => {
2045
2097
const Issue3643 = component$ ( ( ) => {
0 commit comments