From fb23276178b28fdcb75aa22be013a91755f7ad0a Mon Sep 17 00:00:00 2001 From: cpojer Date: Tue, 17 Mar 2015 13:35:53 -0700 Subject: [PATCH] Add warning for getDOMNode calls. --- .../ReactCSSTransitionGroupChild.js | 4 ++-- src/browser/ui/ReactBrowserComponentMixin.js | 12 ++++++++++++ .../class/__tests__/ReactClass-test.js | 19 +++++++++++++++++++ src/core/__tests__/ReactComponent-test.js | 15 +++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/addons/transitions/ReactCSSTransitionGroupChild.js b/src/addons/transitions/ReactCSSTransitionGroupChild.js index 573a30aaa4..179a00029d 100644 --- a/src/addons/transitions/ReactCSSTransitionGroupChild.js +++ b/src/addons/transitions/ReactCSSTransitionGroupChild.js @@ -47,7 +47,7 @@ var ReactCSSTransitionGroupChild = React.createClass({ displayName: 'ReactCSSTransitionGroupChild', transition: function(animationType, finishCallback) { - var node = this.getDOMNode(); + var node = React.findDOMNode(this); var className = this.props.name + '-' + animationType; var activeClassName = className + '-active'; var noEventTimeout = null; @@ -95,7 +95,7 @@ var ReactCSSTransitionGroupChild = React.createClass({ flushClassNameQueue: function() { if (this.isMounted()) { this.classNameQueue.forEach( - CSSCore.addClass.bind(CSSCore, this.getDOMNode()) + CSSCore.addClass.bind(CSSCore, React.findDOMNode(this)) ); } this.classNameQueue.length = 0; diff --git a/src/browser/ui/ReactBrowserComponentMixin.js b/src/browser/ui/ReactBrowserComponentMixin.js index 54137eb880..b070486e9b 100644 --- a/src/browser/ui/ReactBrowserComponentMixin.js +++ b/src/browser/ui/ReactBrowserComponentMixin.js @@ -11,7 +11,12 @@ 'use strict'; +var ReactInstanceMap = require('ReactInstanceMap'); + var findDOMNode = require('findDOMNode'); +var warning = require('warning'); + +var didWarnKey = '_getDOMNodeDidWarn'; var ReactBrowserComponentMixin = { /** @@ -22,6 +27,13 @@ var ReactBrowserComponentMixin = { * @protected */ getDOMNode: function() { + warning( + this.constructor[didWarnKey], + '%s.getDOMNode(...) is deprecated. Please use ' + + 'React.findDOMNode(instance) instead.', + ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown' + ); + this.constructor[didWarnKey] = true; return findDOMNode(this); } }; diff --git a/src/classic/class/__tests__/ReactClass-test.js b/src/classic/class/__tests__/ReactClass-test.js index 49a0e6b439..0376cbc722 100644 --- a/src/classic/class/__tests__/ReactClass-test.js +++ b/src/classic/class/__tests__/ReactClass-test.js @@ -378,4 +378,23 @@ describe('ReactClass-spec', function() { ); }); + it('warns when calling getDOMNode', function() { + var MyComponent = React.createClass({ + render: function() { + return
; + } + }); + + var container = document.createElement('div'); + var instance = React.render(, container); + + instance.getDOMNode(); + + expect(console.warn.calls.length).toBe(1); + expect(console.warn.calls[0].args[0]).toContain( + 'MyComponent.getDOMNode(...) is deprecated. Please use ' + + 'React.findDOMNode(instance) instead.' + ); + }); + }); diff --git a/src/core/__tests__/ReactComponent-test.js b/src/core/__tests__/ReactComponent-test.js index 7dd26652b6..05893fc304 100644 --- a/src/core/__tests__/ReactComponent-test.js +++ b/src/core/__tests__/ReactComponent-test.js @@ -265,4 +265,19 @@ describe('ReactComponent', function() { expect(callback.mock.calls.length).toBe(3); }); + it('warns when calling getDOMNode', function() { + spyOn(console, 'warn'); + + var container = document.createElement('div'); + var instance = React.render(
, container); + + instance.getDOMNode(); + + expect(console.warn.calls.length).toBe(1); + expect(console.warn.calls[0].args[0]).toContain( + 'DIV.getDOMNode(...) is deprecated. Please use ' + + 'React.findDOMNode(instance) instead.' + ); + }); + });