Skip to content

Commit 381540a

Browse files
committed
Added warning for use of ReactLink.
1 parent 3606702 commit 381540a

File tree

6 files changed

+51
-3
lines changed

6 files changed

+51
-3
lines changed

src/renderers/dom/client/wrappers/ReactDOMInput.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ var ReactUpdates = require('ReactUpdates');
1818

1919
var assign = require('Object.assign');
2020
var invariant = require('invariant');
21+
var warning = require('warning');
2122

2223
var instancesByReactID = {};
2324

25+
var didWarnValueLink = false;
26+
2427
function forceUpdateIfMounted() {
2528
if (this._rootNodeID) {
2629
// DOM component is still mounted; update
@@ -67,6 +70,14 @@ var ReactDOMInput = {
6770
props,
6871
inst._currentElement._owner
6972
);
73+
74+
if (props.valueLink !== undefined && !didWarnValueLink) {
75+
warning(
76+
false,
77+
'`.valueLink` on `input` is deprecated; set `.value` and `.onChange` instead.'
78+
);
79+
didWarnValueLink = true;
80+
}
7081
}
7182

7283
var defaultValue = props.defaultValue;

src/renderers/dom/client/wrappers/ReactDOMSelect.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var ReactUpdates = require('ReactUpdates');
1818
var assign = require('Object.assign');
1919
var warning = require('warning');
2020

21+
var didWarnValueLink = false;
22+
2123
var valueContextKey =
2224
'__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);
2325

@@ -58,6 +60,14 @@ function checkSelectPropTypes(inst, props) {
5860
owner
5961
);
6062

63+
if (props.valueLink !== undefined && !didWarnValueLink) {
64+
warning(
65+
false,
66+
'`.valueLink` on `select` is deprecated; set `.value` and `.onChange` instead.'
67+
);
68+
didWarnValueLink = true;
69+
}
70+
6171
for (var i = 0; i < valuePropNames.length; i++) {
6272
var propName = valuePropNames[i];
6373
if (props[propName] == null) {

src/renderers/dom/client/wrappers/ReactDOMTextarea.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ var assign = require('Object.assign');
1919
var invariant = require('invariant');
2020
var warning = require('warning');
2121

22+
var didWarnValueLink = false;
23+
2224
function forceUpdateIfMounted() {
2325
if (this._rootNodeID) {
2426
// DOM component is still mounted; update
@@ -67,6 +69,13 @@ var ReactDOMTextarea = {
6769
props,
6870
inst._currentElement._owner
6971
);
72+
if (props.valueLink !== undefined && !didWarnValueLink) {
73+
warning(
74+
false,
75+
'`.valueLink` on `textarea` is deprecated; set `.value` and `.onChange` instead.'
76+
);
77+
didWarnValueLink = true;
78+
}
7079
}
7180

7281
var defaultValue = props.defaultValue;

src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,14 +254,17 @@ describe('ReactDOMInput', function() {
254254
it('should warn with value and no onChange handler', function() {
255255
var link = new ReactLink('yolo', mocks.getMockFunction());
256256
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` on `input` is deprecated; set `.value` and `.onChange` instead.'
260+
);
258261

259262
ReactTestUtils.renderIntoDocument(
260263
<input type="text" value="zoink" onChange={mocks.getMockFunction()} />
261264
);
262-
expect(console.error.argsForCall.length).toBe(0);
263-
ReactTestUtils.renderIntoDocument(<input type="text" value="zoink" />);
264265
expect(console.error.argsForCall.length).toBe(1);
266+
ReactTestUtils.renderIntoDocument(<input type="text" value="zoink" />);
267+
expect(console.error.argsForCall.length).toBe(2);
265268
});
266269

267270
it('should warn with value and no onChange handler and readOnly specified', function() {

src/renderers/dom/client/wrappers/__tests__/ReactDOMSelect-test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,16 @@ describe('ReactDOMSelect', function() {
357357
<option value="giraffe">A giraffe!</option>
358358
<option value="gorilla">A gorilla!</option>
359359
</select>;
360+
361+
spyOn(console, 'error');
362+
360363
stub = ReactTestUtils.renderIntoDocument(stub);
364+
365+
expect(console.error.argsForCall.length).toBe(1);
366+
expect(console.error.argsForCall[0][0]).toContain(
367+
'`.valueLink` on `select` is deprecated; set `.value` and `.onChange` instead.'
368+
);
369+
361370
var node = ReactDOM.findDOMNode(stub);
362371

363372
expect(node.options[0].selected).toBe(false); // monkey

src/renderers/dom/client/wrappers/__tests__/ReactDOMTextarea-test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,13 @@ describe('ReactDOMTextarea', function() {
241241
var link = new ReactLink('yolo', mocks.getMockFunction());
242242
var instance = <textarea valueLink={link} />;
243243

244+
spyOn(console, 'error');
244245
instance = renderTextarea(instance);
246+
expect(console.error.argsForCall.length).toBe(1);
247+
expect(console.error.argsForCall[0][0]).toContain(
248+
'`.valueLink` on `textarea` is deprecated; set `.value` and `.onChange` instead.'
249+
);
250+
245251

246252
expect(ReactDOM.findDOMNode(instance).value).toBe('yolo');
247253
expect(link.value).toBe('yolo');

0 commit comments

Comments
 (0)