diff --git a/src/platforms/web/server/modules/dom-props.js b/src/platforms/web/server/modules/dom-props.js index 57c18eefc89..f7190ec1158 100644 --- a/src/platforms/web/server/modules/dom-props.js +++ b/src/platforms/web/server/modules/dom-props.js @@ -27,7 +27,7 @@ export default function renderDOMProps (node: VNodeWithData): string { setText(node, props[key], true) } else if (key === 'textContent') { setText(node, props[key], false) - } else if (key === 'value' && node.tag === 'textarea') { + } else if (props[key] && key === 'value' && node.tag === 'textarea') { setText(node, props[key], false) } else { // $flow-disable-line (WTF?) diff --git a/test/ssr/ssr-string.spec.js b/test/ssr/ssr-string.spec.js index e18ca2aead9..a5a572c99c8 100644 --- a/test/ssr/ssr-string.spec.js +++ b/test/ssr/ssr-string.spec.js @@ -1222,6 +1222,26 @@ describe('SSR: renderToString', () => { }) }) + // SSR: textarea domProps keeps falsy values #10803 + it('falsy domProps value', done => { + renderVmWithOptions({ + render(h) { + return h('div', [ + h('textarea', { + domProps: { + value: null + } + }) + ]) + } + }, result => { + expect(result).toContain( + '
' + ) + done() + }) + }) + it('render v-model with