@samitouri / QOS-React-2 / commits / c103c8d065

Added warning for use of ReactLink.

Jim committed Oct 1, 2015 at 13:50 UTC c103c8d065b2033e734079d531b109bebdaefcd9
6 files changed +66 -7
src/renderers/dom/client/wrappers/ReactDOMInput.js
+19
@@ -18,9 +18,13 @@ var ReactUpdates = require('ReactUpdates');
18
19 var assign = require('Object.assign');
20 var invariant = require('invariant');
21 +var warning = require('warning');
22
23 var instancesByReactID = {};
24
25 +var didWarnValueLink = false;
26 +var didWarnCheckedLink = false;
27 +
28 function forceUpdateIfMounted() {
29 if (this._rootNodeID) {
30 // DOM component is still mounted; update
@@ -67,6 +71,21 @@ var ReactDOMInput = {
71 props,
72 inst._currentElement._owner
73 );
74 +
75 + if (props.valueLink !== undefined && !didWarnValueLink) {
76 + warning(
77 + false,
78 + '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
79 + );
80 + didWarnValueLink = true;
81 + }
82 + if (props.checkedLink !== undefined && !didWarnCheckedLink) {
83 + warning(
84 + false,
85 + '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
86 + );
87 + didWarnCheckedLink = true;
88 + }
89 }
90
91 var defaultValue = props.defaultValue;
src/renderers/dom/client/wrappers/ReactDOMSelect.js
+10
@@ -18,6 +18,8 @@ var ReactUpdates = require('ReactUpdates');
18 var assign = require('Object.assign');
19 var warning = require('warning');
20
21 +var didWarnValueLink = false;
22 +
23 var valueContextKey =
24 '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);
25
@@ -58,6 +60,14 @@ function checkSelectPropTypes(inst, props) {
60 owner
61 );
62
63 + if (props.valueLink !== undefined && !didWarnValueLink) {
64 + warning(
65 + false,
66 + '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.'
67 + );
68 + didWarnValueLink = true;
69 + }
70 +
71 for (var i = 0; i < valuePropNames.length; i++) {
72 var propName = valuePropNames[i];
73 if (props[propName] == null) {
src/renderers/dom/client/wrappers/ReactDOMTextarea.js
+9
@@ -19,6 +19,8 @@ var assign = require('Object.assign');
19 var invariant = require('invariant');
20 var warning = require('warning');
21
22 +var didWarnValueLink = false;
23 +
24 function forceUpdateIfMounted() {
25 if (this._rootNodeID) {
26 // DOM component is still mounted; update
@@ -67,6 +69,13 @@ var ReactDOMTextarea = {
69 props,
70 inst._currentElement._owner
71 );
72 + if (props.valueLink !== undefined && !didWarnValueLink) {
73 + warning(
74 + false,
75 + '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.'
76 + );
77 + didWarnValueLink = true;
78 + }
79 }
80
81 var defaultValue = props.defaultValue;
src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
+13 -7
@@ -254,14 +254,17 @@ describe('ReactDOMInput', function() {
254 it('should warn with value and no onChange handler', function() {
255 var link = new ReactLink('yolo', mocks.getMockFunction());
256 ReactTestUtils.renderIntoDocument(<input type="text" valueLink={link} />);
257 - expect(console.error.argsForCall.length).toBe(0);
257 + expect(console.error.argsForCall.length).toBe(1);
258 + expect(console.error.argsForCall[0][0]).toContain(
259 + '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
260 + );
261
262 ReactTestUtils.renderIntoDocument(
263 <input type="text" value="zoink" onChange={mocks.getMockFunction()} />
264 );
262 - expect(console.error.argsForCall.length).toBe(0);
263 - ReactTestUtils.renderIntoDocument(<input type="text" value="zoink" />);
265 expect(console.error.argsForCall.length).toBe(1);
266 + ReactTestUtils.renderIntoDocument(<input type="text" value="zoink" />);
267 + expect(console.error.argsForCall.length).toBe(2);
268 });
269
270 it('should warn with value and no onChange handler and readOnly specified', function() {
@@ -318,7 +321,10 @@ describe('ReactDOMInput', function() {
321 var node = document.createElement('div');
322 var link = new ReactLink(true, mocks.getMockFunction());
323 ReactDOM.render(<input type="checkbox" checkedLink={link} />, node);
321 - expect(console.error.argsForCall.length).toBe(0);
324 + expect(console.error.argsForCall.length).toBe(1);
325 + expect(console.error.argsForCall[0][0]).toContain(
326 + '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
327 + );
328
329 ReactTestUtils.renderIntoDocument(
330 <input
@@ -327,15 +333,15 @@ describe('ReactDOMInput', function() {
333 onChange={mocks.getMockFunction()}
334 />
335 );
330 - expect(console.error.argsForCall.length).toBe(0);
336 + expect(console.error.argsForCall.length).toBe(1);
337
338 ReactTestUtils.renderIntoDocument(
339 <input type="checkbox" checked="false" readOnly={true} />
340 );
335 - expect(console.error.argsForCall.length).toBe(0);
341 + expect(console.error.argsForCall.length).toBe(1);
342
343 ReactTestUtils.renderIntoDocument(<input type="checkbox" checked="false" />);
338 - expect(console.error.argsForCall.length).toBe(1);
344 + expect(console.error.argsForCall.length).toBe(2);
345 });
346
347 it('should warn with checked and no onChange handler with readOnly specified', function() {
src/renderers/dom/client/wrappers/__tests__/ReactDOMSelect-test.js
+9
@@ -357,7 +357,16 @@ describe('ReactDOMSelect', function() {
357 <option value="giraffe">A giraffe!</option>
358 <option value="gorilla">A gorilla!</option>
359 </select>;
360 +
361 + spyOn(console, 'error');
362 +
363 stub = ReactTestUtils.renderIntoDocument(stub);
364 +
365 + expect(console.error.argsForCall.length).toBe(1);
366 + expect(console.error.argsForCall[0][0]).toContain(
367 + '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.'
368 + );
369 +
370 var node = ReactDOM.findDOMNode(stub);
371
372 expect(node.options[0].selected).toBe(false); // monkey
src/renderers/dom/client/wrappers/__tests__/ReactDOMTextarea-test.js
+6
@@ -241,7 +241,13 @@ describe('ReactDOMTextarea', function() {
241 var link = new ReactLink('yolo', mocks.getMockFunction());
242 var instance = <textarea valueLink={link} />;
243
244 + spyOn(console, 'error');
245 instance = renderTextarea(instance);
246 + expect(console.error.argsForCall.length).toBe(1);
247 + expect(console.error.argsForCall[0][0]).toContain(
248 + '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.'
249 + );
250 +
251
252 expect(ReactDOM.findDOMNode(instance).value).toBe('yolo');
253 expect(link.value).toBe('yolo');