Added warning for use of ReactLink.

This commit is contained in:
Jim
2015-10-01 13:50:24 -07:00
parent 3606702245
commit c103c8d065
6 changed files with 66 additions and 7 deletions
@@ -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;
@@ -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) {
@@ -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;
@@ -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(<input type="text" valueLink={link} />);
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(
<input type="text" value="zoink" onChange={mocks.getMockFunction()} />
);
expect(console.error.argsForCall.length).toBe(0);
ReactTestUtils.renderIntoDocument(<input type="text" value="zoink" />);
expect(console.error.argsForCall.length).toBe(1);
ReactTestUtils.renderIntoDocument(<input type="text" value="zoink" />);
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(<input type="checkbox" checkedLink={link} />, 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(
<input
@@ -327,15 +333,15 @@ describe('ReactDOMInput', function() {
onChange={mocks.getMockFunction()}
/>
);
expect(console.error.argsForCall.length).toBe(0);
expect(console.error.argsForCall.length).toBe(1);
ReactTestUtils.renderIntoDocument(
<input type="checkbox" checked="false" readOnly={true} />
);
expect(console.error.argsForCall.length).toBe(0);
expect(console.error.argsForCall.length).toBe(1);
ReactTestUtils.renderIntoDocument(<input type="checkbox" checked="false" />);
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() {
@@ -357,7 +357,16 @@ describe('ReactDOMSelect', function() {
<option value="giraffe">A giraffe!</option>
<option value="gorilla">A gorilla!</option>
</select>;
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
@@ -241,7 +241,13 @@ describe('ReactDOMTextarea', function() {
var link = new ReactLink('yolo', mocks.getMockFunction());
var instance = <textarea valueLink={link} />;
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');