mirror of https://github.com/vuejs/core.git
fix(compiler-ssr): ensure v-show has a higher priority in SSR (#12171)
close #12162
This commit is contained in:
parent
8620a616eb
commit
836b82976f
|
@ -11,9 +11,9 @@ describe('ssr: v-show', () => {
|
|||
const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
|
||||
|
||||
return function ssrRender(_ctx, _push, _parent, _attrs) {
|
||||
_push(\`<div\${_ssrRenderAttrs(_mergeProps({
|
||||
_push(\`<div\${_ssrRenderAttrs(_mergeProps(_attrs, {
|
||||
style: (_ctx.foo) ? null : { display: "none" }
|
||||
}, _attrs))}></div>\`)
|
||||
}))}></div>\`)
|
||||
}"
|
||||
`)
|
||||
})
|
||||
|
@ -92,6 +92,24 @@ describe('ssr: v-show', () => {
|
|||
`)
|
||||
})
|
||||
|
||||
test('with style + display', () => {
|
||||
expect(compileWithWrapper(`<div v-show="foo" style="display:flex" />`).code)
|
||||
.toMatchInlineSnapshot(`
|
||||
"const { ssrRenderStyle: _ssrRenderStyle, ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
|
||||
|
||||
return function ssrRender(_ctx, _push, _parent, _attrs) {
|
||||
_push(\`<div\${
|
||||
_ssrRenderAttrs(_attrs)
|
||||
}><div style="\${
|
||||
_ssrRenderStyle([
|
||||
{"display":"flex"},
|
||||
(_ctx.foo) ? null : { display: "none" }
|
||||
])
|
||||
}"></div></div>\`)
|
||||
}"
|
||||
`)
|
||||
})
|
||||
|
||||
test('with v-bind', () => {
|
||||
expect(
|
||||
compileWithWrapper(
|
||||
|
|
|
@ -88,6 +88,17 @@ export const ssrTransformElement: NodeTransform = (node, context) => {
|
|||
const hasCustomDir = node.props.some(
|
||||
p => p.type === NodeTypes.DIRECTIVE && !isBuiltInDirective(p.name),
|
||||
)
|
||||
|
||||
// v-show has a higher priority in ssr
|
||||
const vShowPropIndex = node.props.findIndex(
|
||||
i => i.type === NodeTypes.DIRECTIVE && i.name === 'show',
|
||||
)
|
||||
if (vShowPropIndex !== -1) {
|
||||
const vShowProp = node.props[vShowPropIndex]
|
||||
node.props.splice(vShowPropIndex, 1)
|
||||
node.props.push(vShowProp)
|
||||
}
|
||||
|
||||
const needMergeProps = hasDynamicVBind || hasCustomDir
|
||||
if (needMergeProps) {
|
||||
const { props, directives } = buildProps(
|
||||
|
|
Loading…
Reference in New Issue