Skip to content

Commit f811dc2

Browse files
committed
fix(compiler-ssr): fix component event handlers inheritance in ssr
fix #5664
1 parent 4caa521 commit f811dc2

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

packages/compiler-ssr/__tests__/ssrComponent.spec.ts

+14
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@ describe('ssr: components', () => {
1717
`)
1818
})
1919

20+
// event listeners should still be passed
21+
test('event listeners', () => {
22+
expect(compile(`<foo @click="bar" />`).code).toMatchInlineSnapshot(`
23+
"const { resolveComponent: _resolveComponent, mergeProps: _mergeProps } = require(\\"vue\\")
24+
const { ssrRenderComponent: _ssrRenderComponent } = require(\\"vue/server-renderer\\")
25+
26+
return function ssrRender(_ctx, _push, _parent, _attrs) {
27+
const _component_foo = _resolveComponent(\\"foo\\")
28+
29+
_push(_ssrRenderComponent(_component_foo, _mergeProps({ onClick: _ctx.bar }, _attrs), null, _parent))
30+
}"
31+
`)
32+
})
33+
2034
test('dynamic component', () => {
2135
expect(compile(`<component is="foo" prop="b" />`).code)
2236
.toMatchInlineSnapshot(`

packages/compiler-ssr/src/index.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import {
1010
trackSlotScopes,
1111
noopDirectiveTransform,
1212
transformBind,
13-
transformStyle
13+
transformStyle,
14+
transformOn
1415
} from '@vue/compiler-dom'
1516
import { ssrCodegenTransform } from './ssrCodegenTransform'
1617
import { ssrTransformElement } from './transforms/ssrTransformElement'
@@ -70,11 +71,12 @@ export function compile(
7071
directiveTransforms: {
7172
// reusing core v-bind
7273
bind: transformBind,
74+
on: transformOn,
7375
// model and show has dedicated SSR handling
7476
model: ssrTransformModel,
7577
show: ssrTransformShow,
7678
// the following are ignored during SSR
77-
on: noopDirectiveTransform,
79+
// on: noopDirectiveTransform,
7880
cloak: noopDirectiveTransform,
7981
once: noopDirectiveTransform,
8082
memo: noopDirectiveTransform,

packages/compiler-ssr/src/transforms/ssrTransformElement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ export const ssrTransformElement: NodeTransform = (node, context) => {
194194
if (!needMergeProps) {
195195
node.children = [createInterpolation(prop.exp, prop.loc)]
196196
}
197-
} else if (!needMergeProps) {
197+
} else if (!needMergeProps && prop.name !== 'on') {
198198
// Directive transforms.
199199
const directiveTransform = context.directiveTransforms[prop.name]
200200
if (directiveTransform) {

0 commit comments

Comments
 (0)