@samitouri / QOS-React-2 / commits / 538d0b08f2

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() {