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