mirror of https://github.com/vuejs/core.git
fix(hydration): fix css vars hydration mismatch false positive on non-root nodes
close #10317 test case from #10325
This commit is contained in:
parent
df4a6e1dd8
commit
995d2fdcca
|
@ -1554,5 +1554,22 @@ describe('SSR hydration', () => {
|
|||
app.mount(container)
|
||||
expect(`Hydration style mismatch`).not.toHaveBeenWarned()
|
||||
})
|
||||
|
||||
// #10317 - test case from #10325
|
||||
test('css vars should only be added to expected on component root dom', () => {
|
||||
const container = document.createElement('div')
|
||||
container.innerHTML = `<div style="--foo:red;"><div style="color:var(--foo);" /></div>`
|
||||
const app = createSSRApp({
|
||||
setup() {
|
||||
useCssVars(() => ({
|
||||
foo: 'red',
|
||||
}))
|
||||
return () =>
|
||||
h('div', null, [h('div', { style: { color: 'var(--foo)' } })])
|
||||
},
|
||||
})
|
||||
app.mount(container)
|
||||
expect(`Hydration style mismatch`).not.toHaveBeenWarned()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -753,9 +753,15 @@ function propHasMismatch(
|
|||
}
|
||||
}
|
||||
|
||||
const cssVars = instance?.getCssVars?.()
|
||||
for (const key in cssVars) {
|
||||
expectedMap.set(`--${key}`, String(cssVars[key]))
|
||||
const root = instance?.subTree
|
||||
if (
|
||||
vnode === root ||
|
||||
(root?.type === Fragment && (root.children as VNode[]).includes(vnode))
|
||||
) {
|
||||
const cssVars = instance?.getCssVars?.()
|
||||
for (const key in cssVars) {
|
||||
expectedMap.set(`--${key}`, String(cssVars[key]))
|
||||
}
|
||||
}
|
||||
|
||||
if (!isMapEqual(actualMap, expectedMap)) {
|
||||
|
|
Loading…
Reference in New Issue