From: Evan You Date: Fri, 11 Nov 2022 06:14:55 +0000 (+0800) Subject: fix(custom-elements): should not reflect non-decalred properties set before upgrade X-Git-Tag: v3.2.45~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e509091000779acbfae4c85cc1cc3973b1b2e64;p=thirdparty%2Fvuejs%2Fcore.git fix(custom-elements): should not reflect non-decalred properties set before upgrade --- diff --git a/packages/runtime-dom/__tests__/customElement.spec.ts b/packages/runtime-dom/__tests__/customElement.spec.ts index 68049efe7a..03a5361d69 100644 --- a/packages/runtime-dom/__tests__/customElement.spec.ts +++ b/packages/runtime-dom/__tests__/customElement.spec.ts @@ -201,15 +201,18 @@ describe('defineCustomElement', () => { expect(props.dataAge).toBe(5) }, render() { - return `foo: ${this.foo}` + return h('div', `foo: ${this.foo}`) } }) const el = document.createElement('my-el-upgrade') as any el.foo = 'hello' el.dataset.age = 5 + el.notProp = 1 container.appendChild(el) 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 diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index fc68bb43f2..55530b98c3 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -248,7 +248,12 @@ export class VueElement extends BaseClass { // check if there are props set pre-upgrade or connect for (const key of Object.keys(this)) { 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 + ) } }