mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Added findDOMNode, as we move toward deprecating getDOMNode
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Copyright 2013-2014, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @emails react-core
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
var React = require('React');
|
||||
var ReactTestUtils = require('ReactTestUtils');
|
||||
|
||||
describe('findDOMNode', function() {
|
||||
it('findDOMNode should return null if passed null', function() {
|
||||
expect(React.findDOMNode(null)).toBe(null);
|
||||
});
|
||||
|
||||
it('findDOMNode should find dom element', function() {
|
||||
var MyNode = React.createClass({
|
||||
render: function() {
|
||||
return <div><span>Noise</span></div>;
|
||||
}
|
||||
});
|
||||
|
||||
var myNode = ReactTestUtils.renderIntoDocument(<MyNode />);
|
||||
var myDiv = React.findDOMNode(myNode);
|
||||
var mySameDiv = React.findDOMNode(myDiv);
|
||||
expect(myDiv.tagName).toBe('DIV');
|
||||
expect(mySameDiv).toBe(myDiv);
|
||||
});
|
||||
|
||||
it('findDOMNode should reject random objects', function() {
|
||||
expect(function() {React.findDOMNode({foo: 'bar'});})
|
||||
.toThrow('Invariant Violation: Element appears to be neither ' +
|
||||
'ReactComponent nor DOMNode (keys: foo)'
|
||||
);
|
||||
});
|
||||
|
||||
it('findDOMNode should reject unmounted objects with render func', function() {
|
||||
expect(function() {React.findDOMNode({render: function(){}});})
|
||||
.toThrow('Invariant Violation: Component contains `render` ' +
|
||||
'method but is not mounted in the DOM'
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Copyright 2013-2014, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @providesModule findDOMNode
|
||||
* @typechecks static-only
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
var ReactComponent = require('ReactComponent');
|
||||
var ReactInstanceMap = require('ReactInstanceMap');
|
||||
var ReactMount = require('ReactMount');
|
||||
|
||||
var invariant = require('invariant');
|
||||
var isNode = require('isNode');
|
||||
|
||||
/**
|
||||
* Returns the DOM node rendered by this element.
|
||||
*
|
||||
* @param {ReactComponent|DOMElement} element
|
||||
* @return {DOMElement} The root node of this element.
|
||||
*/
|
||||
function findDOMNode(componentOrElement) {
|
||||
if (componentOrElement == null) {
|
||||
return null;
|
||||
}
|
||||
if (isNode(componentOrElement)) {
|
||||
return componentOrElement;
|
||||
}
|
||||
if (ReactInstanceMap.has(componentOrElement)) {
|
||||
return ReactMount.getNodeFromInstance(componentOrElement);
|
||||
}
|
||||
invariant(
|
||||
!(componentOrElement.render != null && typeof(componentOrElement.render) === 'function'),
|
||||
'Component contains `render` method but is not mounted in the DOM',
|
||||
Object.keys(componentOrElement)
|
||||
);
|
||||
invariant(
|
||||
false,
|
||||
'Element appears to be neither ReactComponent nor DOMNode (keys: %s)',
|
||||
Object.keys(componentOrElement)
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = findDOMNode;
|
||||
@@ -35,6 +35,7 @@ var ReactRef = require('ReactRef');
|
||||
var ReactServerRendering = require('ReactServerRendering');
|
||||
|
||||
var assign = require('Object.assign');
|
||||
var findDOMNode = require('findDOMNode');
|
||||
var onlyChild = require('onlyChild');
|
||||
|
||||
ReactDefaultInjection.inject();
|
||||
@@ -69,6 +70,7 @@ var React = {
|
||||
},
|
||||
constructAndRenderComponent: ReactMount.constructAndRenderComponent,
|
||||
constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,
|
||||
findDOMNode: findDOMNode,
|
||||
render: render,
|
||||
renderToString: ReactServerRendering.renderToString,
|
||||
renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
|
||||
|
||||
@@ -11,9 +11,7 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
var ReactMount = require('ReactMount');
|
||||
|
||||
var invariant = require('invariant');
|
||||
var findDOMNode = require('findDOMNode');
|
||||
|
||||
var ReactBrowserComponentMixin = {
|
||||
/**
|
||||
@@ -24,11 +22,7 @@ var ReactBrowserComponentMixin = {
|
||||
* @protected
|
||||
*/
|
||||
getDOMNode: function() {
|
||||
invariant(
|
||||
this.isMounted(),
|
||||
'getDOMNode(): A component must be mounted to have a DOM node.'
|
||||
);
|
||||
return ReactMount.getNodeFromInstance(this);
|
||||
return findDOMNode(this);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user