diff --git a/src/renderers/dom/client/wrappers/ReactDOMInput.js b/src/renderers/dom/client/wrappers/ReactDOMInput.js
index 65e7e0bb48..5946fbd311 100644
--- a/src/renderers/dom/client/wrappers/ReactDOMInput.js
+++ b/src/renderers/dom/client/wrappers/ReactDOMInput.js
@@ -18,9 +18,13 @@ var ReactUpdates = require('ReactUpdates');
var assign = require('Object.assign');
var invariant = require('invariant');
+var warning = require('warning');
var instancesByReactID = {};
+var didWarnValueLink = false;
+var didWarnCheckedLink = false;
+
function forceUpdateIfMounted() {
if (this._rootNodeID) {
// DOM component is still mounted; update
@@ -67,6 +71,21 @@ var ReactDOMInput = {
props,
inst._currentElement._owner
);
+
+ if (props.valueLink !== undefined && !didWarnValueLink) {
+ warning(
+ false,
+ '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
+ );
+ didWarnValueLink = true;
+ }
+ if (props.checkedLink !== undefined && !didWarnCheckedLink) {
+ warning(
+ false,
+ '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
+ );
+ didWarnCheckedLink = true;
+ }
}
var defaultValue = props.defaultValue;
diff --git a/src/renderers/dom/client/wrappers/ReactDOMSelect.js b/src/renderers/dom/client/wrappers/ReactDOMSelect.js
index 01cccdd53b..2036723acc 100644
--- a/src/renderers/dom/client/wrappers/ReactDOMSelect.js
+++ b/src/renderers/dom/client/wrappers/ReactDOMSelect.js
@@ -18,6 +18,8 @@ var ReactUpdates = require('ReactUpdates');
var assign = require('Object.assign');
var warning = require('warning');
+var didWarnValueLink = false;
+
var valueContextKey =
'__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);
@@ -58,6 +60,14 @@ function checkSelectPropTypes(inst, props) {
owner
);
+ if (props.valueLink !== undefined && !didWarnValueLink) {
+ warning(
+ false,
+ '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.'
+ );
+ didWarnValueLink = true;
+ }
+
for (var i = 0; i < valuePropNames.length; i++) {
var propName = valuePropNames[i];
if (props[propName] == null) {
diff --git a/src/renderers/dom/client/wrappers/ReactDOMTextarea.js b/src/renderers/dom/client/wrappers/ReactDOMTextarea.js
index a091f02560..587e3f7b5a 100644
--- a/src/renderers/dom/client/wrappers/ReactDOMTextarea.js
+++ b/src/renderers/dom/client/wrappers/ReactDOMTextarea.js
@@ -19,6 +19,8 @@ var assign = require('Object.assign');
var invariant = require('invariant');
var warning = require('warning');
+var didWarnValueLink = false;
+
function forceUpdateIfMounted() {
if (this._rootNodeID) {
// DOM component is still mounted; update
@@ -67,6 +69,13 @@ var ReactDOMTextarea = {
props,
inst._currentElement._owner
);
+ if (props.valueLink !== undefined && !didWarnValueLink) {
+ warning(
+ false,
+ '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.'
+ );
+ didWarnValueLink = true;
+ }
}
var defaultValue = props.defaultValue;
diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
index f2be98686c..e13691969c 100644
--- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
+++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
@@ -254,14 +254,17 @@ describe('ReactDOMInput', function() {
it('should warn with value and no onChange handler', function() {
var link = new ReactLink('yolo', mocks.getMockFunction());
ReactTestUtils.renderIntoDocument();
- expect(console.error.argsForCall.length).toBe(0);
+ expect(console.error.argsForCall.length).toBe(1);
+ expect(console.error.argsForCall[0][0]).toContain(
+ '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
+ );
ReactTestUtils.renderIntoDocument(
);
- expect(console.error.argsForCall.length).toBe(0);
- ReactTestUtils.renderIntoDocument();
expect(console.error.argsForCall.length).toBe(1);
+ ReactTestUtils.renderIntoDocument();
+ expect(console.error.argsForCall.length).toBe(2);
});
it('should warn with value and no onChange handler and readOnly specified', function() {
@@ -318,7 +321,10 @@ describe('ReactDOMInput', function() {
var node = document.createElement('div');
var link = new ReactLink(true, mocks.getMockFunction());
ReactDOM.render(, node);
- expect(console.error.argsForCall.length).toBe(0);
+ expect(console.error.argsForCall.length).toBe(1);
+ expect(console.error.argsForCall[0][0]).toContain(
+ '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.'
+ );
ReactTestUtils.renderIntoDocument(
);
- expect(console.error.argsForCall.length).toBe(0);
+ expect(console.error.argsForCall.length).toBe(1);
ReactTestUtils.renderIntoDocument(
);
- expect(console.error.argsForCall.length).toBe(0);
+ expect(console.error.argsForCall.length).toBe(1);
ReactTestUtils.renderIntoDocument();
- expect(console.error.argsForCall.length).toBe(1);
+ expect(console.error.argsForCall.length).toBe(2);
});
it('should warn with checked and no onChange handler with readOnly specified', function() {
diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMSelect-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMSelect-test.js
index f1cdc7baf9..b400905029 100644
--- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMSelect-test.js
+++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMSelect-test.js
@@ -357,7 +357,16 @@ describe('ReactDOMSelect', function() {
;
+
+ spyOn(console, 'error');
+
stub = ReactTestUtils.renderIntoDocument(stub);
+
+ expect(console.error.argsForCall.length).toBe(1);
+ expect(console.error.argsForCall[0][0]).toContain(
+ '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.'
+ );
+
var node = ReactDOM.findDOMNode(stub);
expect(node.options[0].selected).toBe(false); // monkey
diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMTextarea-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMTextarea-test.js
index c4b7c38a21..23ee791304 100644
--- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMTextarea-test.js
+++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMTextarea-test.js
@@ -241,7 +241,13 @@ describe('ReactDOMTextarea', function() {
var link = new ReactLink('yolo', mocks.getMockFunction());
var instance = ;
+ spyOn(console, 'error');
instance = renderTextarea(instance);
+ expect(console.error.argsForCall.length).toBe(1);
+ expect(console.error.argsForCall[0][0]).toContain(
+ '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.'
+ );
+
expect(ReactDOM.findDOMNode(instance).value).toBe('yolo');
expect(link.value).toBe('yolo');