diff --git a/packages/runtime-core/__tests__/hydration.spec.ts b/packages/runtime-core/__tests__/hydration.spec.ts index 80258554..c5dbe539 100644 --- a/packages/runtime-core/__tests__/hydration.spec.ts +++ b/packages/runtime-core/__tests__/hydration.spec.ts @@ -461,6 +461,60 @@ describe('SSR hydration', () => { expect(text.textContent).toBe('bye') }) + test('handle click error in ssr mode', async () => { + const App = { + setup() { + const throwError = () => { + throw new Error('Sentry Error') + } + return { throwError } + }, + template: ` +
+ +
` + } + + const container = document.createElement('div') + // server render + container.innerHTML = await renderToString(h(App)) + // hydrate + const app = createSSRApp(App) + const handler = (app.config.errorHandler = jest.fn()) + app.mount(container) + // assert interactions + // parent button click + triggerEvent('click', container.querySelector('.parent-click')!) + expect(handler).toHaveBeenCalled() + }) + + test('handle blur error in ssr mode', async () => { + const App = { + setup() { + const throwError = () => { + throw new Error('Sentry Error') + } + return { throwError } + }, + template: ` +
+ +
` + } + + const container = document.createElement('div') + // server render + container.innerHTML = await renderToString(h(App)) + // hydrate + const app = createSSRApp(App) + const handler = (app.config.errorHandler = jest.fn()) + app.mount(container) + // assert interactions + // parent blur event + triggerEvent('blur', container.querySelector('.parent-click')!) + expect(handler).toHaveBeenCalled() + }) + test('Suspense', async () => { const AsyncChild = { async setup() { diff --git a/packages/runtime-core/src/hydration.ts b/packages/runtime-core/src/hydration.ts index 939cf0ca..517b1495 100644 --- a/packages/runtime-core/src/hydration.ts +++ b/packages/runtime-core/src/hydration.ts @@ -287,13 +287,29 @@ export function createHydrationFunctions( (forcePatchValue && key.endsWith('value')) || (isOn(key) && !isReservedProp(key)) ) { - patchProp(el, key, null, props[key]) + patchProp( + el, + key, + null, + props[key], + false, + undefined, + parentComponent + ) } } } else if (props.onClick) { // Fast path for click listeners (which is most often) to avoid // iterating through props. - patchProp(el, 'onClick', null, props.onClick) + patchProp( + el, + 'onClick', + null, + props.onClick, + false, + undefined, + parentComponent + ) } } // vnode / directive hooks