File tree 2 files changed +33
-3
lines changed 2 files changed +33
-3
lines changed Original file line number Diff line number Diff line change @@ -1654,6 +1654,29 @@ describe('SSR hydration', () => {
1654
1654
expect ( `mismatch` ) . not . toHaveBeenWarned ( )
1655
1655
} )
1656
1656
1657
+ test ( 'transition appear work with pre-existing class' , ( ) => {
1658
+ const { vnode, container } = mountWithHydration (
1659
+ `<template><div class="foo">foo</div></template>` ,
1660
+ ( ) =>
1661
+ h (
1662
+ Transition ,
1663
+ { appear : true } ,
1664
+ {
1665
+ default : ( ) => h ( 'div' , { class : 'foo' } , 'foo' ) ,
1666
+ } ,
1667
+ ) ,
1668
+ )
1669
+ expect ( container . firstChild ) . toMatchInlineSnapshot ( `
1670
+ <div
1671
+ class="foo v-enter-from v-enter-active"
1672
+ >
1673
+ foo
1674
+ </div>
1675
+ ` )
1676
+ expect ( vnode . el ) . toBe ( container . firstChild )
1677
+ expect ( `mismatch` ) . not . toHaveBeenWarned ( )
1678
+ } )
1679
+
1657
1680
test ( 'transition appear with v-if' , ( ) => {
1658
1681
const show = false
1659
1682
const { vnode, container } = mountWithHydration (
Original file line number Diff line number Diff line change @@ -398,9 +398,11 @@ export function createHydrationFunctions(
398
398
parentComponent . vnode . props . appear
399
399
400
400
const content = ( el as HTMLTemplateElement ) . content
401
- . firstChild as Element
401
+ . firstChild as Element & { $cls ?: string }
402
402
403
403
if ( needCallTransitionHooks ) {
404
+ const cls = content . getAttribute ( 'class' )
405
+ if ( cls ) content . $cls = cls
404
406
transition ! . beforeEnter ( content )
405
407
}
406
408
@@ -786,7 +788,7 @@ export function createHydrationFunctions(
786
788
* Dev only
787
789
*/
788
790
function propHasMismatch (
789
- el : Element ,
791
+ el : Element & { $cls ?: string } ,
790
792
key : string ,
791
793
clientValue : any ,
792
794
vnode : VNode ,
@@ -799,7 +801,12 @@ function propHasMismatch(
799
801
if ( key === 'class' ) {
800
802
// classes might be in different order, but that doesn't affect cascade
801
803
// so we just need to check if the class lists contain the same classes.
802
- actual = el . getAttribute ( 'class' )
804
+ if ( el . $cls ) {
805
+ actual = el . $cls
806
+ delete el . $cls
807
+ } else {
808
+ actual = el . getAttribute ( 'class' )
809
+ }
803
810
expected = normalizeClass ( clientValue )
804
811
if ( ! isSetEqual ( toClassSet ( actual || '' ) , toClassSet ( expected ) ) ) {
805
812
mismatchType = MismatchTypes . CLASS
You can’t perform that action at this time.
0 commit comments