Skip to content

Commit

Permalink
fix(runtime-dom): should not coerce nullish values to empty strings f…
Browse files Browse the repository at this point in the history
…or non-string dom props

fix #1049
close #1092, close #1093, close #1094
  • Loading branch information
yyx990803 committed May 1, 2020
1 parent 68e1ce8 commit 20bc7ba
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
17 changes: 17 additions & 0 deletions packages/runtime-dom/__tests__/patchProps.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ describe('runtime-dom: props patching', () => {
const el = document.createElement('div')
patchProp(el, 'id', null, 'foo')
expect(el.id).toBe('foo')
// prop with string value should be set to empty string on null values
patchProp(el, 'id', null, null)
expect(el.id).toBe('')
})
Expand Down Expand Up @@ -75,4 +76,20 @@ describe('runtime-dom: props patching', () => {
expect(root.innerHTML).toBe(`<div>bar</div>`)
expect(fn).toHaveBeenCalled()
})

// #1049
test('set value as-is for non string-value props', () => {
const el = document.createElement('video')
// jsdom doesn't really support video playback. srcObject in a real browser
// should default to `null`, but in jsdom it's `undefined`.
// anyway, here we just want to make sure Vue doesn't set non-string props
// to an empty string on nullish values - it should reset to its default
// value.
const intiialValue = el.srcObject
const fakeObject = {}
patchProp(el, 'srcObject', null, fakeObject)
expect(el.srcObject).not.toBe(fakeObject)
patchProp(el, 'srcObject', null, null)
expect(el.srcObject).toBe(intiialValue)
})
})
5 changes: 4 additions & 1 deletion packages/runtime-dom/src/modules/props.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ export function patchDOMProp(
if (value === '' && typeof el[key] === 'boolean') {
// e.g. <select multiple> compiles to { multiple: '' }
el[key] = true
} else if (value == null && typeof el[key] === 'string') {
// e.g. <div :id="null">
el[key] = ''
} else {
el[key] = value == null ? '' : value
el[key] = value
}
}

0 comments on commit 20bc7ba

Please sign in to comment.