From c756da24b2d8635cf52b4c7d3abf5bf938852cc5 Mon Sep 17 00:00:00 2001 From: edison Date: Mon, 2 Sep 2024 17:09:38 +0800 Subject: [PATCH] fix(hydration): handle text nodes with 0 during hydration (#11772) close #11771 --- packages/runtime-core/__tests__/hydration.spec.ts | 6 +++--- packages/runtime-core/src/hydration.ts | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/__tests__/hydration.spec.ts b/packages/runtime-core/__tests__/hydration.spec.ts index 142a171f7cf..a2ea72638f9 100644 --- a/packages/runtime-core/__tests__/hydration.spec.ts +++ b/packages/runtime-core/__tests__/hydration.spec.ts @@ -152,10 +152,10 @@ describe('SSR hydration', () => { // #7285 test('element with multiple continuous text vnodes', async () => { // should no mismatch warning - const { container } = mountWithHydration('
fooo
', () => - h('div', ['fo', createTextVNode('o'), 'o']), + const { container } = mountWithHydration('
foo0o
', () => + h('div', ['fo', createTextVNode('o'), 0, 'o']), ) - expect(container.textContent).toBe('fooo') + expect(container.textContent).toBe('foo0o') }) test('element with elements children', async () => { diff --git a/packages/runtime-core/src/hydration.ts b/packages/runtime-core/src/hydration.ts index 8060f9475b7..15a460f99b4 100644 --- a/packages/runtime-core/src/hydration.ts +++ b/packages/runtime-core/src/hydration.ts @@ -554,8 +554,7 @@ export function createHydrationFunctions( // JSX-compiled fns, but on the client the browser parses only 1 text // node. // look ahead for next possible text vnode - let next = children[i + 1] - if (next && (next = normalizeVNode(next)).type === Text) { + if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) { // create an extra TextNode on the client for the next vnode to // adopt insert(