From b8bd149d8aa3f175a1a656d62f7b6ec60c31a364 Mon Sep 17 00:00:00 2001 From: Daniel Jun Suguimoto Date: Mon, 21 Sep 2020 11:04:58 -0300 Subject: [PATCH] fix(ssr): textarea keeps undefined/null values (#11121) * fix(ssr): textarea keeps undefined/null values * refactor(ssr): Code review changes for null values in textareas --- src/platforms/web/server/modules/dom-props.js | 4 ++-- test/ssr/ssr-string.spec.js | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/platforms/web/server/modules/dom-props.js b/src/platforms/web/server/modules/dom-props.js index 57c18eefc89..6d92badcb85 100644 --- a/src/platforms/web/server/modules/dom-props.js +++ b/src/platforms/web/server/modules/dom-props.js @@ -2,7 +2,7 @@ import VNode from 'core/vdom/vnode' import { renderAttr } from './attrs' -import { isDef, isUndef, extend } from 'shared/util' +import { isDef, isUndef, extend, toString } from 'shared/util' import { propsToAttrMap, isRenderableAttr } from '../util' export default function renderDOMProps (node: VNodeWithData): string { @@ -28,7 +28,7 @@ export default function renderDOMProps (node: VNodeWithData): string { } else if (key === 'textContent') { setText(node, props[key], false) } else if (key === 'value' && node.tag === 'textarea') { - setText(node, props[key], false) + setText(node, toString(props[key]), false) } else { // $flow-disable-line (WTF?) const attr = propsToAttrMap[key] || key.toLowerCase() diff --git a/test/ssr/ssr-string.spec.js b/test/ssr/ssr-string.spec.js index e18ca2aead9..b24f7e024b5 100644 --- a/test/ssr/ssr-string.spec.js +++ b/test/ssr/ssr-string.spec.js @@ -1594,6 +1594,25 @@ describe('SSR: renderToString', () => { renderToString(vueInstance, err => done(err)) }) + + it('undefined v-model with textarea', done => { + renderVmWithOptions({ + render (h) { + return h('div', [ + h('textarea', { + domProps: { + value: null + } + }) + ]) + } + }, result => { + expect(result).toContain( + '
' + ) + done() + }) + }) }) function renderVmWithOptions (options, cb) {