fix(custom-elements): should not reflect non-decalred properties set before upgrade

This commit is contained in:
Evan You 2022-11-11 14:14:55 +08:00
parent 665f2ae121
commit 5e50909100
2 changed files with 11 additions and 3 deletions

View File

@ -201,15 +201,18 @@ describe('defineCustomElement', () => {
expect(props.dataAge).toBe(5) expect(props.dataAge).toBe(5)
}, },
render() { render() {
return `foo: ${this.foo}` return h('div', `foo: ${this.foo}`)
} }
}) })
const el = document.createElement('my-el-upgrade') as any const el = document.createElement('my-el-upgrade') as any
el.foo = 'hello' el.foo = 'hello'
el.dataset.age = 5 el.dataset.age = 5
el.notProp = 1
container.appendChild(el) container.appendChild(el)
customElements.define('my-el-upgrade', E) customElements.define('my-el-upgrade', E)
expect(el.shadowRoot.innerHTML).toBe(`foo: hello`) expect(el.shadowRoot.firstChild.innerHTML).toBe(`foo: hello`)
// should not reflect if not declared as a prop
expect(el.hasAttribute('not-prop')).toBe(false)
}) })
// https://github.com/vuejs/core/issues/6163 // https://github.com/vuejs/core/issues/6163

View File

@ -248,7 +248,12 @@ export class VueElement extends BaseClass {
// check if there are props set pre-upgrade or connect // check if there are props set pre-upgrade or connect
for (const key of Object.keys(this)) { for (const key of Object.keys(this)) {
if (key[0] !== '_') { if (key[0] !== '_') {
this._setProp(key, this[key as keyof this], true, false) this._setProp(
key,
this[key as keyof this],
rawKeys.includes(key),
false
)
} }
} }