From edc0fa4c3f542c1bc806004c8b1481d4e27a30d2 Mon Sep 17 00:00:00 2001 From: Cheng Lou Date: Tue, 25 Mar 2014 12:31:12 -0700 Subject: [PATCH] assertValidProps for updating DOM components through renderComponent `renderComponent(
, container)` throws correctly, but not when it's called a second time (i.e. updating rather than mounting). It goes through `ReactDOMComponent.updateComponent` but there wasn't a props assertion there. (Removed the assertion in `receiveComponent`) --- src/browser/ui/ReactDOMComponent.js | 2 +- .../ui/__tests__/ReactDOMComponent-test.js | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/browser/ui/ReactDOMComponent.js b/src/browser/ui/ReactDOMComponent.js index 5b1eface68..b29226b739 100644 --- a/src/browser/ui/ReactDOMComponent.js +++ b/src/browser/ui/ReactDOMComponent.js @@ -215,7 +215,6 @@ ReactDOMComponent.Mixin = { return; } - assertValidProps(nextComponent.props); ReactComponent.Mixin.receiveComponent.call( this, nextComponent, @@ -236,6 +235,7 @@ ReactDOMComponent.Mixin = { 'ReactDOMComponent', 'updateComponent', function(transaction, prevProps, prevOwner) { + assertValidProps(this.props); ReactComponent.Mixin.updateComponent.call( this, transaction, diff --git a/src/browser/ui/__tests__/ReactDOMComponent-test.js b/src/browser/ui/__tests__/ReactDOMComponent-test.js index f49941b132..082c629a01 100644 --- a/src/browser/ui/__tests__/ReactDOMComponent-test.js +++ b/src/browser/ui/__tests__/ReactDOMComponent-test.js @@ -340,6 +340,41 @@ describe('ReactDOMComponent', function() { }); }); + describe('updateComponent', function() { + var React; + var container; + + beforeEach(function() { + React = require('React'); + container = document.createElement('div'); + }); + + it("should validate against multiple children props", function() { + React.renderComponent(
, container); + + expect(function() { + React.renderComponent( +
, + container + ); + }).toThrow( + 'Invariant Violation: Can only set one of `children` or ' + + '`props.dangerouslySetInnerHTML`.' + ); + }); + + it("should validate against invalid styles", function() { + React.renderComponent(
, container); + + expect(function() { + React.renderComponent(
, container); + }).toThrow( + 'Invariant Violation: The `style` prop expects a mapping from style ' + + 'properties to values, not a string.' + ); + }); + }); + describe('unmountComponent', function() { it("should clean up listeners", function() { var React = require('React');