mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Merge pull request #5833 from jimfb/remove-getDOMNode
Removed getDOMNode from react classes.
This commit is contained in:
@@ -362,23 +362,4 @@ describe('ReactClass-spec', function() {
|
||||
);
|
||||
});
|
||||
|
||||
it('warns when calling getDOMNode', function() {
|
||||
var MyComponent = React.createClass({
|
||||
render: function() {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
|
||||
var container = document.createElement('div');
|
||||
var instance = ReactDOM.render(<MyComponent />, container);
|
||||
|
||||
instance.getDOMNode();
|
||||
|
||||
expect(console.error.calls.length).toBe(1);
|
||||
expect(console.error.argsForCall[0][0]).toContain(
|
||||
'MyComponent.getDOMNode(...) is deprecated. Please use ' +
|
||||
'ReactDOM.findDOMNode(instance) instead.'
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -106,10 +106,6 @@ ReactComponent.prototype.forceUpdate = function(callback) {
|
||||
*/
|
||||
if (__DEV__) {
|
||||
var deprecatedAPIs = {
|
||||
getDOMNode: [
|
||||
'getDOMNode',
|
||||
'Use ReactDOM.findDOMNode(component) instead.',
|
||||
],
|
||||
isMounted: [
|
||||
'isMounted',
|
||||
'Instead, make sure to clean up subscriptions and pending requests in ' +
|
||||
|
||||
@@ -345,19 +345,15 @@ describe 'ReactCoffeeScriptClass', ->
|
||||
spyOn console, 'error'
|
||||
instance =
|
||||
test Inner(name: 'foo'), 'DIV', 'foo'
|
||||
expect(-> instance.getDOMNode()).toThrow()
|
||||
expect(-> instance.replaceState {}).toThrow()
|
||||
expect(-> instance.isMounted()).toThrow()
|
||||
expect(-> instance.setProps name: 'bar').toThrow()
|
||||
expect(-> instance.replaceProps name: 'bar').toThrow()
|
||||
expect(console.error.calls.length).toBe 3
|
||||
expect(console.error.calls.length).toBe 2
|
||||
expect(console.error.argsForCall[0][0]).toContain(
|
||||
'getDOMNode(...) is deprecated in plain JavaScript React classes'
|
||||
)
|
||||
expect(console.error.argsForCall[1][0]).toContain(
|
||||
'replaceState(...) is deprecated in plain JavaScript React classes'
|
||||
)
|
||||
expect(console.error.argsForCall[2][0]).toContain(
|
||||
expect(console.error.argsForCall[1][0]).toContain(
|
||||
'isMounted(...) is deprecated in plain JavaScript React classes'
|
||||
)
|
||||
|
||||
|
||||
@@ -402,20 +402,15 @@ describe('ReactES6Class', function() {
|
||||
it('should throw AND warn when trying to access classic APIs', function() {
|
||||
spyOn(console, 'error');
|
||||
var instance = test(<Inner name="foo" />, 'DIV', 'foo');
|
||||
expect(() => instance.getDOMNode()).toThrow();
|
||||
expect(() => instance.replaceState({})).toThrow();
|
||||
expect(() => instance.isMounted()).toThrow();
|
||||
expect(() => instance.setProps({name: 'bar'})).toThrow();
|
||||
expect(() => instance.replaceProps({name: 'bar'})).toThrow();
|
||||
expect(console.error.calls.length).toBe(3);
|
||||
expect(console.error.calls.length).toBe(2);
|
||||
expect(console.error.argsForCall[0][0]).toContain(
|
||||
'getDOMNode(...) is deprecated in plain JavaScript React classes. ' +
|
||||
'Use ReactDOM.findDOMNode(component) instead.'
|
||||
);
|
||||
expect(console.error.argsForCall[1][0]).toContain(
|
||||
'replaceState(...) is deprecated in plain JavaScript React classes'
|
||||
);
|
||||
expect(console.error.argsForCall[2][0]).toContain(
|
||||
expect(console.error.argsForCall[1][0]).toContain(
|
||||
'isMounted(...) is deprecated in plain JavaScript React classes'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -486,19 +486,15 @@ describe('ReactTypeScriptClass', function() {
|
||||
React.createElement(Inner, {name: 'foo'}),
|
||||
'DIV','foo'
|
||||
);
|
||||
expect(() => instance.getDOMNode()).toThrow();
|
||||
expect(() => instance.replaceState({})).toThrow();
|
||||
expect(() => instance.isMounted()).toThrow();
|
||||
expect(() => instance.setProps({ name: 'bar' })).toThrow();
|
||||
expect(() => instance.replaceProps({ name: 'bar' })).toThrow();
|
||||
expect((<any>console.error).argsForCall.length).toBe(3);
|
||||
expect((<any>console.error).argsForCall.length).toBe(2);
|
||||
expect((<any>console.error).argsForCall[0][0]).toContain(
|
||||
'getDOMNode(...) is deprecated in plain JavaScript React classes'
|
||||
);
|
||||
expect((<any>console.error).argsForCall[1][0]).toContain(
|
||||
'replaceState(...) is deprecated in plain JavaScript React classes'
|
||||
);
|
||||
expect((<any>console.error).argsForCall[2][0]).toContain(
|
||||
expect((<any>console.error).argsForCall[1][0]).toContain(
|
||||
'isMounted(...) is deprecated in plain JavaScript React classes'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -31,7 +31,7 @@ function findDOMNode(componentOrElement) {
|
||||
if (owner !== null) {
|
||||
warning(
|
||||
owner._warnedAboutRefsInRender,
|
||||
'%s is accessing getDOMNode or findDOMNode inside its render(). ' +
|
||||
'%s is accessing findDOMNode inside its render(). ' +
|
||||
'render() should be a pure function of props and state. It should ' +
|
||||
'never access something that requires stale data from the previous ' +
|
||||
'render, such as refs. Move this logic to componentDidMount and ' +
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/**
|
||||
* Copyright 2013-present, 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 ReactBrowserComponentMixin
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var ReactInstanceMap = require('ReactInstanceMap');
|
||||
|
||||
var findDOMNode = require('findDOMNode');
|
||||
var warning = require('warning');
|
||||
|
||||
var didWarnKey = '_getDOMNodeDidWarn';
|
||||
|
||||
var ReactBrowserComponentMixin = {
|
||||
/**
|
||||
* Returns the DOM node rendered by this component.
|
||||
*
|
||||
* @return {DOMElement} The root node of this component.
|
||||
* @final
|
||||
* @protected
|
||||
*/
|
||||
getDOMNode: function() {
|
||||
warning(
|
||||
this.constructor[didWarnKey],
|
||||
'%s.getDOMNode(...) is deprecated. Please use ' +
|
||||
'ReactDOM.findDOMNode(instance) instead.',
|
||||
ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown'
|
||||
);
|
||||
this.constructor[didWarnKey] = true;
|
||||
return findDOMNode(this);
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = ReactBrowserComponentMixin;
|
||||
@@ -17,7 +17,6 @@ var DefaultEventPluginOrder = require('DefaultEventPluginOrder');
|
||||
var EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');
|
||||
var ExecutionEnvironment = require('ExecutionEnvironment');
|
||||
var HTMLDOMPropertyConfig = require('HTMLDOMPropertyConfig');
|
||||
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
|
||||
var ReactComponentBrowserEnvironment =
|
||||
require('ReactComponentBrowserEnvironment');
|
||||
var ReactDOMComponent = require('ReactDOMComponent');
|
||||
@@ -75,8 +74,6 @@ function inject() {
|
||||
ReactDOMTextComponent
|
||||
);
|
||||
|
||||
ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
|
||||
|
||||
ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
|
||||
ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
|
||||
|
||||
|
||||
@@ -265,26 +265,6 @@ describe('ReactComponent', function() {
|
||||
expect(callback.mock.calls.length).toBe(3);
|
||||
});
|
||||
|
||||
it('warns when calling getDOMNode', function() {
|
||||
spyOn(console, 'error');
|
||||
|
||||
var Potato = React.createClass({
|
||||
render: function() {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
var container = document.createElement('div');
|
||||
var instance = ReactDOM.render(<Potato />, container);
|
||||
|
||||
instance.getDOMNode();
|
||||
|
||||
expect(console.error.calls.length).toBe(1);
|
||||
expect(console.error.argsForCall[0][0]).toContain(
|
||||
'Potato.getDOMNode(...) is deprecated. Please use ' +
|
||||
'ReactDOM.findDOMNode(instance) instead.'
|
||||
);
|
||||
});
|
||||
|
||||
it('throws usefully when rendering badly-typed elements', function() {
|
||||
spyOn(console, 'error');
|
||||
|
||||
|
||||
@@ -322,7 +322,7 @@ describe('ReactComponentLifeCycle', function() {
|
||||
ReactTestUtils.renderIntoDocument(<Component />);
|
||||
expect(console.error.argsForCall.length).toBe(1);
|
||||
expect(console.error.argsForCall[0][0]).toContain(
|
||||
'Component is accessing getDOMNode or findDOMNode inside its render()'
|
||||
'Component is accessing findDOMNode inside its render()'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -1073,21 +1073,11 @@ describe('ReactCompositeComponent', function() {
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static0).textContent).toBe('A');
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static1).textContent).toBe('B');
|
||||
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static0))
|
||||
.toBe(comp.refs.static0.getDOMNode());
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static1))
|
||||
.toBe(comp.refs.static1.getDOMNode());
|
||||
|
||||
// When flipping the order, the refs should update even though the actual
|
||||
// contents do not
|
||||
ReactDOM.render(<Component flipped={true} />, container);
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static0).textContent).toBe('B');
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static1).textContent).toBe('A');
|
||||
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static0))
|
||||
.toBe(comp.refs.static0.getDOMNode());
|
||||
expect(ReactDOM.findDOMNode(comp.refs.static1))
|
||||
.toBe(comp.refs.static1.getDOMNode());
|
||||
});
|
||||
|
||||
it('should allow access to findDOMNode in componentWillUnmount', function() {
|
||||
@@ -1096,11 +1086,11 @@ describe('ReactCompositeComponent', function() {
|
||||
var Component = React.createClass({
|
||||
componentDidMount: function() {
|
||||
a = ReactDOM.findDOMNode(this);
|
||||
expect(a).toBe(this.getDOMNode());
|
||||
expect(a).not.toBe(null);
|
||||
},
|
||||
componentWillUnmount: function() {
|
||||
b = ReactDOM.findDOMNode(this);
|
||||
expect(b).toBe(this.getDOMNode());
|
||||
expect(b).not.toBe(null);
|
||||
},
|
||||
render: function() {
|
||||
return <div />;
|
||||
|
||||
@@ -158,7 +158,7 @@ describe('ReactEmptyComponent', function() {
|
||||
}
|
||||
);
|
||||
|
||||
it('should have getDOMNode return null when multiple layers of composite ' +
|
||||
it('should have findDOMNode return null when multiple layers of composite ' +
|
||||
'components render to the same null placeholder',
|
||||
() => {
|
||||
var GrandChild = React.createClass({
|
||||
|
||||
@@ -352,33 +352,6 @@ describe('ReactTestUtils', function() {
|
||||
expect(log).toEqual(['orangepurple', 'orange', 'purple']);
|
||||
});
|
||||
|
||||
it('does not warn for getDOMNode on ES6 classes', function() {
|
||||
var Foo = React.createClass({
|
||||
render: function() {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
|
||||
class Bar extends React.Component {
|
||||
render() {
|
||||
return <div />;
|
||||
}
|
||||
}
|
||||
|
||||
spyOn(console, 'error');
|
||||
|
||||
var foo = ReactTestUtils.renderIntoDocument(<Foo />);
|
||||
expect(ReactTestUtils.isDOMComponent(foo)).toBe(false);
|
||||
|
||||
var bar = ReactTestUtils.renderIntoDocument(<Bar />);
|
||||
expect(ReactTestUtils.isDOMComponent(bar)).toBe(false);
|
||||
|
||||
var div = ReactTestUtils.renderIntoDocument(<div />);
|
||||
expect(ReactTestUtils.isDOMComponent(div)).toBe(true);
|
||||
|
||||
expect(console.error.calls.length).toBe(0);
|
||||
});
|
||||
|
||||
it('should support injected wrapper components as DOM components', function() {
|
||||
var getTestDocument = require('getTestDocument');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user