Remove legacy dom node/ref stuff.
jim committed
Nov 17, 2015 at 14:12 UTC
538d0b08f2a35c216b1ef65ea7e9e9a04bf82707
4 files changed
+3
-214
src/renderers/dom/shared/ReactDOMComponent.js
+1
-129
@@ -35,10 +35,8 @@ var ReactDOMSelect = require('ReactDOMSelect');
35
var ReactDOMTextarea = require('ReactDOMTextarea');
36
var ReactMultiChild = require('ReactMultiChild');
37
var ReactPerf = require('ReactPerf');
38
-var ReactUpdateQueue = require('ReactUpdateQueue');
38
39
var assign = require('Object.assign');
41
-var canDefineProperty = require('canDefineProperty');
40
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
41
var invariant = require('invariant');
42
var isEventSupported = require('isEventSupported');
@@ -73,102 +71,6 @@ function getDeclarationErrorAddendum(internalInstance) {
71
return '';
72
}
73
76
-var legacyPropsDescriptor;
77
-if (__DEV__) {
78
- legacyPropsDescriptor = {
79
- props: {
80
- enumerable: false,
81
- get: function() {
82
- var component = ReactDOMComponentTree.getInstanceFromNode(this);
83
- warning(
84
- false,
85
- 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' +
86
- 'recreate the props as `render` did originally or read the DOM ' +
87
- 'properties/attributes directly from this node (e.g., ' +
88
- 'this.refs.box.className).%s',
89
- getDeclarationErrorAddendum(component)
90
- );
91
- return component._currentElement.props;
92
- },
93
- },
94
- };
95
-}
96
-
97
-function legacyGetDOMNode() {
98
- if (__DEV__) {
99
- var component = ReactDOMComponentTree.getInstanceFromNode(this);
100
- warning(
101
- false,
102
- 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' +
103
- 'instead, use the node directly.%s',
104
- getDeclarationErrorAddendum(component)
105
- );
106
- }
107
- return this;
108
-}
109
-
110
-function legacyIsMounted() {
111
- var component = ReactDOMComponentTree.getInstanceFromNode(this);
112
- if (__DEV__) {
113
- warning(
114
- false,
115
- 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s',
116
- getDeclarationErrorAddendum(component)
117
- );
118
- }
119
- return !!component;
120
-}
121
-
122
-function legacySetStateEtc() {
123
- if (__DEV__) {
124
- var component = ReactDOMComponentTree.getInstanceFromNode(this);
125
- warning(
126
- false,
127
- 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' +
128
- '.forceUpdate() of a DOM node. This is a no-op.%s',
129
- getDeclarationErrorAddendum(component)
130
- );
131
- }
132
-}
133
-
134
-function legacySetProps(partialProps, callback) {
135
- var component = ReactDOMComponentTree.getInstanceFromNode(this);
136
- if (__DEV__) {
137
- warning(
138
- false,
139
- 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' +
140
- 'Instead, call ReactDOM.render again at the top level.%s',
141
- getDeclarationErrorAddendum(component)
142
- );
143
- }
144
- if (!component) {
145
- return;
146
- }
147
- ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);
148
- if (callback) {
149
- ReactUpdateQueue.enqueueCallbackInternal(component, callback);
150
- }
151
-}
152
-
153
-function legacyReplaceProps(partialProps, callback) {
154
- var component = ReactDOMComponentTree.getInstanceFromNode(this);
155
- if (__DEV__) {
156
- warning(
157
- false,
158
- 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' +
159
- 'Instead, call ReactDOM.render again at the top level.%s',
160
- getDeclarationErrorAddendum(component)
161
- );
162
- }
163
- if (!component) {
164
- return;
165
- }
166
- ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);
167
- if (callback) {
168
- ReactUpdateQueue.enqueueCallbackInternal(component, callback);
169
- }
170
-}
171
-
74
function friendlyStringify(obj) {
75
if (typeof obj === 'object') {
76
if (Array.isArray(obj)) {
@@ -908,10 +810,6 @@ ReactDOMComponent.Mixin = {
810
context
811
);
812
911
- if (!canDefineProperty && this._flags & Flags.nodeHasLegacyProperties) {
912
- this._nativeNode.props = nextProps;
913
- }
914
-
813
if (this._tag === 'select') {
814
// <select> value update needs to occur after <option> children
815
// reconciliation
@@ -1157,33 +1055,7 @@ ReactDOMComponent.Mixin = {
1055
},
1056
1057
getPublicInstance: function() {
1160
- var node = getNode(this);
1161
- if (this._flags & Flags.nodeHasLegacyProperties) {
1162
- return node;
1163
- } else {
1164
- node.getDOMNode = legacyGetDOMNode;
1165
- node.isMounted = legacyIsMounted;
1166
- node.setState = legacySetStateEtc;
1167
- node.replaceState = legacySetStateEtc;
1168
- node.forceUpdate = legacySetStateEtc;
1169
- node.setProps = legacySetProps;
1170
- node.replaceProps = legacyReplaceProps;
1171
-
1172
- if (__DEV__) {
1173
- if (canDefineProperty) {
1174
- Object.defineProperties(node, legacyPropsDescriptor);
1175
- } else {
1176
- // updateComponent will update this property on subsequent renders
1177
- node.props = this._currentElement.props;
1178
- }
1179
- } else {
1180
- // updateComponent will update this property on subsequent renders
1181
- node.props = this._currentElement.props;
1182
- }
1183
-
1184
- this._flags |= Flags.nodeHasLegacyProperties;
1185
- return node;
1186
- }
1058
+ return getNode(this);
1059
},
1060
1061
};
src/renderers/dom/shared/ReactDOMComponentFlags.js
+1
-2
@@ -12,8 +12,7 @@
12
'use strict';
13
14
var ReactDOMComponentFlags = {
15
- nodeHasLegacyProperties: 1 << 0,
16
- hasCachedChildNodes: 1 << 1,
15
+ hasCachedChildNodes: 1 << 0,
16
};
17
18
module.exports = ReactDOMComponentFlags;
src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
-82
@@ -1088,86 +1088,4 @@ describe('ReactDOMComponent', function() {
1088
);
1089
});
1090
});
1091
-
1092
- describe('DOM nodes as refs', function() {
1093
- var ReactTestUtils;
1094
-
1095
- beforeEach(function() {
1096
- ReactTestUtils = require('ReactTestUtils');
1097
- });
1098
-
1099
- it('warns when accessing properties on DOM components', function() {
1100
- spyOn(console, 'error');
1101
- var innerDiv;
1102
- var Animal = React.createClass({
1103
- render: function() {
1104
- return <div ref="div">iguana</div>;
1105
- },
1106
- componentDidMount: function() {
1107
- innerDiv = this.refs.div;
1108
-
1109
- void this.refs.div.props;
1110
- this.refs.div.setState();
1111
- expect(this.refs.div.getDOMNode()).toBe(this.refs.div);
1112
- expect(this.refs.div.isMounted()).toBe(true);
1113
- },
1114
- });
1115
- var container = document.createElement('div');
1116
- ReactDOM.render(<Animal />, container);
1117
- ReactDOM.unmountComponentAtNode(container);
1118
- expect(innerDiv.isMounted()).toBe(false);
1119
-
1120
- expect(console.error.calls.length).toBe(5);
1121
- expect(console.error.argsForCall[0][0]).toBe(
1122
- 'Warning: ReactDOMComponent: Do not access .props of a DOM ' +
1123
- 'node; instead, recreate the props as `render` did originally or ' +
1124
- 'read the DOM properties/attributes directly from this node (e.g., ' +
1125
- 'this.refs.box.className). This DOM node was rendered by `Animal`.'
1126
- );
1127
- expect(console.error.argsForCall[1][0]).toBe(
1128
- 'Warning: ReactDOMComponent: Do not access .setState(), ' +
1129
- '.replaceState(), or .forceUpdate() of a DOM node. This is a no-op. ' +
1130
- 'This DOM node was rendered by `Animal`.'
1131
- );
1132
- expect(console.error.argsForCall[2][0]).toBe(
1133
- 'Warning: ReactDOMComponent: Do not access .getDOMNode() of a DOM ' +
1134
- 'node; instead, use the node directly. This DOM node was ' +
1135
- 'rendered by `Animal`.'
1136
- );
1137
- expect(console.error.argsForCall[3][0]).toBe(
1138
- 'Warning: ReactDOMComponent: Do not access .isMounted() of a DOM ' +
1139
- 'node. This DOM node was rendered by `Animal`.'
1140
- );
1141
- expect(console.error.argsForCall[4][0]).toContain('isMounted');
1142
- });
1143
-
1144
- it('handles legacy setProps and replaceProps', function() {
1145
- spyOn(console, 'error');
1146
- var node = ReactTestUtils.renderIntoDocument(<div>rhinoceros</div>);
1147
-
1148
- node.setProps({className: 'herbiverous'});
1149
- expect(node.className).toBe('herbiverous');
1150
- expect(node.textContent).toBe('rhinoceros');
1151
-
1152
- node.replaceProps({className: 'invisible rhino'});
1153
- expect(node.className).toBe('invisible rhino');
1154
- expect(node.textContent).toBe('');
1155
-
1156
- expect(console.error.calls.length).toBe(2);
1157
- expect(console.error.argsForCall[0][0]).toBe(
1158
- 'Warning: ReactDOMComponent: Do not access .setProps() of a DOM node. ' +
1159
- 'Instead, call ReactDOM.render again at the top level.'
1160
- );
1161
- expect(console.error.argsForCall[1][0]).toBe(
1162
- 'Warning: ReactDOMComponent: Do not access .replaceProps() of a DOM ' +
1163
- 'node. Instead, call ReactDOM.render again at the top level.'
1164
- );
1165
- });
1166
-
1167
- it('does not touch ref-less nodes', function() {
1168
- var node = ReactTestUtils.renderIntoDocument(<div><span /></div>);
1169
- expect(typeof node.getDOMNode).toBe('function');
1170
- expect(typeof node.firstChild.getDOMNode).toBe('undefined');
1171
- });
1172
- });
1091
});
src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
+1
-1
@@ -146,7 +146,7 @@ describe('ReactCompositeComponent', function() {
146
var anchor = instance.getAnchor();
147
var actualDOMAnchorNode = ReactDOM.findDOMNode(anchor);
148
expect(actualDOMAnchorNode.className).toBe('');
149
- expect(actualDOMAnchorNode).toBe(anchor.getDOMNode());
149
+ expect(actualDOMAnchorNode).toBe(ReactDOM.findDOMNode(anchor));
150
});
151
152
it('should auto bind methods and values correctly', function() {