diff --git a/packages/runtime-dom/__tests__/patchStyle.spec.ts b/packages/runtime-dom/__tests__/patchStyle.spec.ts index c488e51ecab..8b701da5781 100644 --- a/packages/runtime-dom/__tests__/patchStyle.spec.ts +++ b/packages/runtime-dom/__tests__/patchStyle.spec.ts @@ -7,6 +7,22 @@ describe(`runtime-dom: style patching`, () => { expect(el.style.cssText.replace(/\s/g, '')).toBe('color:red;') }) + // #1309 + it('should not patch same string style', () => { + const el = document.createElement('div') + const fn = jest.fn() + const value = (el.style.cssText = 'color:red;') + Object.defineProperty(el.style, 'cssText', { + get(): any { + return value + }, + set: fn + }) + patchProp(el, 'style', value, value) + expect(el.style.cssText.replace(/\s/g, '')).toBe('color:red;') + expect(fn).not.toBeCalled() + }) + it('plain object', () => { const el = document.createElement('div') patchProp(el, 'style', {}, { color: 'red' }) diff --git a/packages/runtime-dom/src/modules/style.ts b/packages/runtime-dom/src/modules/style.ts index 67c5593fe5e..e67e8000e36 100644 --- a/packages/runtime-dom/src/modules/style.ts +++ b/packages/runtime-dom/src/modules/style.ts @@ -8,7 +8,9 @@ export function patchStyle(el: Element, prev: Style, next: Style) { if (!next) { el.removeAttribute('style') } else if (isString(next)) { - style.cssText = next + if (prev !== next) { + style.cssText = next + } } else { for (const key in next) { setStyle(style, key, next[key] as string)