From: edison Date: Wed, 21 Jan 2026 03:27:44 +0000 (+0800) Subject: fix(teleport): apply css vars after hydration (#14343) X-Git-Tag: v3.6.0-beta.4~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b117d116ec1eb9b0d3029d9f77a665a2326cb87d;p=thirdparty%2Fvuejs%2Fcore.git fix(teleport): apply css vars after hydration (#14343) --- diff --git a/packages/runtime-vapor/__tests__/hydration.spec.ts b/packages/runtime-vapor/__tests__/hydration.spec.ts index 6a4066163a..f64aea1246 100644 --- a/packages/runtime-vapor/__tests__/hydration.spec.ts +++ b/packages/runtime-vapor/__tests__/hydration.spec.ts @@ -1,4 +1,5 @@ import { + VaporTeleport, child, createComponent, createPlainElement, @@ -3584,6 +3585,49 @@ describe('Vapor Mode hydration', () => { `bar`, ) }) + + test('should apply css vars after hydration', async () => { + const state = reactive({ color: 'red' }) + + const teleportContainer = document.createElement('div') + teleportContainer.id = 'teleport-css-vars' + teleportContainer.innerHTML = + `` + + `content` + + `` + document.body.appendChild(teleportContainer) + + const App = defineVaporComponent({ + setup() { + useVaporCssVars(() => state) + return createComponent( + VaporTeleport, + { to: () => '#teleport-css-vars' }, + { default: () => template('content', true)() }, + ) + }, + }) + + const container = document.createElement('div') + container.innerHTML = '' + document.body.appendChild(container) + + const app = createVaporSSRApp(App) + app.mount(container) + + await nextTick() + + // css vars should be applied after hydration + const span = teleportContainer.querySelector('span') as HTMLElement + expect(span).toBeTruthy() + expect(span.style.getPropertyValue('--color')).toBe('red') + expect(span.hasAttribute('data-v-owner')).toBe(true) + + // css vars should update reactively + state.color = 'green' + await nextTick() + expect(span.style.getPropertyValue('--color')).toBe('green') + }) }) describe('async component', async () => { diff --git a/packages/runtime-vapor/src/components/Teleport.ts b/packages/runtime-vapor/src/components/Teleport.ts index 738766a4e0..785c410d22 100644 --- a/packages/runtime-vapor/src/components/Teleport.ts +++ b/packages/runtime-vapor/src/components/Teleport.ts @@ -344,6 +344,7 @@ export class TeleportFragment extends VaporFragment { this.hydrateDisabledTeleport(currentHydrationNode!) } + updateCssVars(this) advanceHydrationNode(this.anchor!) } }