From eda9ec53b550194336eb19d8dd9b5d752ff50043 Mon Sep 17 00:00:00 2001 From: Jan Kassens Date: Tue, 7 Apr 2015 11:44:49 -0700 Subject: [PATCH] Fix for style not always reset when set to null When the style property existed, but was set to null, `this._previousStyleCopy` was not set back to `null` causing an old value to persist. This broke setting the style to `null` the next time. Fixes #3606. --- src/browser/ui/ReactDOMComponent.js | 2 ++ .../ui/__tests__/ReactDOMComponent-test.js | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/browser/ui/ReactDOMComponent.js b/src/browser/ui/ReactDOMComponent.js index fc3a1e447b7e9..9aa97a11eba57 100644 --- a/src/browser/ui/ReactDOMComponent.js +++ b/src/browser/ui/ReactDOMComponent.js @@ -442,6 +442,8 @@ ReactDOMComponent.Mixin = { if (propKey === STYLE) { if (nextProp) { nextProp = this._previousStyleCopy = assign({}, nextProp); + } else { + this._previousStyleCopy = null; } if (lastProp) { // Unset styles on `lastProp` but not on `nextProp`. diff --git a/src/browser/ui/__tests__/ReactDOMComponent-test.js b/src/browser/ui/__tests__/ReactDOMComponent-test.js index 8574963cb4575..49a0449f039a4 100644 --- a/src/browser/ui/__tests__/ReactDOMComponent-test.js +++ b/src/browser/ui/__tests__/ReactDOMComponent-test.js @@ -109,6 +109,27 @@ describe('ReactDOMComponent', function() { expect(stubStyle.display).toEqual('block'); }); + it("should update styles if updated to null multiple times", function() { + var styles = null; + var container = document.createElement('div'); + React.render(
, container); + + styles = {display: 'block'}; + var stubStyle = container.firstChild.style; + + React.render(
, container); + expect(stubStyle.display).toEqual('block'); + + React.render(
, container); + expect(stubStyle.display).toEqual(''); + + React.render(
, container); + expect(stubStyle.display).toEqual('block'); + + React.render(
, container); + expect(stubStyle.display).toEqual(''); + }); + it("should remove attributes", function() { var container = document.createElement('div'); React.render(, container);