From ee86942d77a2b835ce227bcc7e2287b6ce226d87 Mon Sep 17 00:00:00 2001 From: Robert Knight Date: Fri, 13 Mar 2015 22:16:19 +0000 Subject: [PATCH] Fix incorrect update of style when props.style transitions from null to non-null ReactDOMComponent maintains a copy of the previous style object to support in-place mutations of props.style. This cached object was not cleared when the style property was removed in a props update. Fixes #3409 --- src/browser/ui/ReactDOMComponent.js | 1 + src/browser/ui/__tests__/ReactDOMComponent-test.js | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/browser/ui/ReactDOMComponent.js b/src/browser/ui/ReactDOMComponent.js index a1c8bc2348..cf93f29b86 100644 --- a/src/browser/ui/ReactDOMComponent.js +++ b/src/browser/ui/ReactDOMComponent.js @@ -367,6 +367,7 @@ ReactDOMComponent.Mixin = { styleUpdates[styleName] = ''; } } + this._previousStyleCopy = null; } else if (registrationNameModules.hasOwnProperty(propKey)) { if (lastProps[propKey]) { // Only call deleteListener if there was a listener previously or diff --git a/src/browser/ui/__tests__/ReactDOMComponent-test.js b/src/browser/ui/__tests__/ReactDOMComponent-test.js index aabc6393bc..2f99e48453 100644 --- a/src/browser/ui/__tests__/ReactDOMComponent-test.js +++ b/src/browser/ui/__tests__/ReactDOMComponent-test.js @@ -152,6 +152,17 @@ describe('ReactDOMComponent', function() { expect(stubStyle.color).toEqual(''); }); + it("should update styles when 'style' changes from null to object", function() { + var container = document.createElement('div'); + var styles = {color: 'red'}; + React.render(
, container); + React.render(
, container); + React.render(
, container); + + var stubStyle = container.firstChild.style; + expect(stubStyle.color).toEqual('red'); + }); + it("should empty element when removing innerHTML", function() { var container = document.createElement('div'); React.render(
, container);