From c103c8d065b2033e734079d531b109bebdaefcd9 Mon Sep 17 00:00:00 2001 From: Jim Date: Thu, 1 Oct 2015 13:50:24 -0700 Subject: [PATCH] Added warning for use of ReactLink. --- .../dom/client/wrappers/ReactDOMInput.js | 19 ++++++++++++++++++ .../dom/client/wrappers/ReactDOMSelect.js | 10 ++++++++++ .../dom/client/wrappers/ReactDOMTextarea.js | 9 +++++++++ .../wrappers/__tests__/ReactDOMInput-test.js | 20 ++++++++++++------- .../wrappers/__tests__/ReactDOMSelect-test.js | 9 +++++++++ .../__tests__/ReactDOMTextarea-test.js | 6 ++++++ 6 files changed, 66 insertions(+), 7 deletions(-) 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 =