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');