From: Evan You Date: Tue, 17 May 2022 09:45:53 +0000 (+0800) Subject: fix(ssr): inherit scope id on functional component during ssr X-Git-Tag: v3.2.34~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=847d7f782bb6074c6b31378e07d94cb41ad30bd2;p=thirdparty%2Fvuejs%2Fcore.git fix(ssr): inherit scope id on functional component during ssr fix #5817 --- diff --git a/packages/server-renderer/src/render.ts b/packages/server-renderer/src/render.ts index 4090ef9f45..ae71a9e627 100644 --- a/packages/server-renderer/src/render.ts +++ b/packages/server-renderer/src/render.ts @@ -4,6 +4,7 @@ import { ComponentInternalInstance, DirectiveBinding, Fragment, + FunctionalComponent, mergeProps, ssrUtils, Static, @@ -112,12 +113,17 @@ function renderComponentSubTree( const comp = instance.type as Component const { getBuffer, push } = createBuffer() if (isFunction(comp)) { - renderVNode( - push, - (instance.subTree = renderComponentRoot(instance)), - instance, - slotScopeId - ) + let root = renderComponentRoot(instance) + // #5817 scope ID attrs not falling through if functional component doesn't + // have props + if (!(comp as FunctionalComponent).props) { + for (const key in instance.attrs) { + if (key.startsWith(`data-v-`)) { + ;(root.props || (root.props = {}))[key] = `` + } + } + } + renderVNode(push, (instance.subTree = root), instance, slotScopeId) } else { if ( (!instance.render || instance.render === NOOP) &&