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(