Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions src/browser/ReactDOM.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

var ReactElement = require('ReactElement');
var ReactElementValidator = require('ReactElementValidator');
var ReactLegacyElement = require('ReactLegacyElement');

var mapObject = require('mapObject');

Expand All @@ -26,13 +25,9 @@ var mapObject = require('mapObject');
*/
function createDOMFactory(tag) {
if (__DEV__) {
return ReactLegacyElement.markNonLegacyFactory(
ReactElementValidator.createFactory(tag)
);
return ReactElementValidator.createFactory(tag);
}
return ReactLegacyElement.markNonLegacyFactory(
ReactElement.createFactory(tag)
);
return ReactElement.createFactory(tag);
}

/**
Expand Down
20 changes: 0 additions & 20 deletions src/browser/__tests__/ReactDOM-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,24 +114,4 @@ describe('ReactDOM', function() {
expect(element.type).toBe('div');
expect(console.warn.argsForCall.length).toBe(0);
});

it('warns but allow dom factories to be used in createFactory', function() {
spyOn(console, 'warn');
var factory = React.createFactory(React.DOM.div);
expect(factory().type).toBe('div');
expect(console.warn.argsForCall.length).toBe(1);
expect(console.warn.argsForCall[0][0]).toContain(
'Do not pass React.DOM.div'
);
});

it('warns but allow dom factories to be used in createElement', function() {
spyOn(console, 'warn');
var element = React.createElement(React.DOM.div);
expect(element.type).toBe('div');
expect(console.warn.argsForCall.length).toBe(1);
expect(console.warn.argsForCall[0][0]).toContain(
'Do not pass React.DOM.div'
);
});
});
10 changes: 0 additions & 10 deletions src/browser/ui/React.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ var ReactDOM = require('ReactDOM');
var ReactDOMComponent = require('ReactDOMComponent');
var ReactDefaultInjection = require('ReactDefaultInjection');
var ReactInstanceHandles = require('ReactInstanceHandles');
var ReactLegacyElement = require('ReactLegacyElement');
var ReactMount = require('ReactMount');
var ReactMultiChild = require('ReactMultiChild');
var ReactPerf = require('ReactPerf');
Expand All @@ -46,14 +45,6 @@ if (__DEV__) {
createFactory = ReactElementValidator.createFactory;
}

// TODO: Drop legacy elements once classes no longer export these factories
createElement = ReactLegacyElement.wrapCreateElement(
createElement
);
createFactory = ReactLegacyElement.wrapCreateFactory(
createFactory
);

var render = ReactPerf.measure('React', 'render', ReactMount.render);

var React = {
Expand All @@ -77,7 +68,6 @@ var React = {
renderToString: ReactServerRendering.renderToString,
renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
unmountComponentAtNode: ReactMount.unmountComponentAtNode,
isValidClass: ReactLegacyElement.isValidClass,
isValidElement: ReactElement.isValidElement,
withContext: ReactContext.withContext,

Expand Down
9 changes: 2 additions & 7 deletions src/browser/ui/ReactMount.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ var DOMProperty = require('DOMProperty');
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
var ReactCurrentOwner = require('ReactCurrentOwner');
var ReactElement = require('ReactElement');
var ReactLegacyElement = require('ReactLegacyElement');
var ReactInstanceHandles = require('ReactInstanceHandles');
var ReactPerf = require('ReactPerf');

Expand All @@ -27,10 +26,6 @@ var invariant = require('invariant');
var shouldUpdateReactComponent = require('shouldUpdateReactComponent');
var warning = require('warning');

var createElement = ReactLegacyElement.wrapCreateElement(
ReactElement.createElement
);

var SEPARATOR = ReactInstanceHandles.SEPARATOR;

var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
Expand Down Expand Up @@ -342,7 +337,7 @@ var ReactMount = {
typeof nextElement === 'string' ?
' Instead of passing an element string, make sure to instantiate ' +
'it by passing it to React.createElement.' :
ReactLegacyElement.isValidFactory(nextElement) ?
typeof nextElement === 'function' ?
' Instead of passing a component class, make sure to instantiate ' +
'it by passing it to React.createElement.' :
// Check if it quacks like a element
Expand Down Expand Up @@ -394,7 +389,7 @@ var ReactMount = {
* @return {ReactComponent} Component instance rendered in `container`.
*/
constructAndRenderComponent: function(constructor, props, container) {
var element = createElement(constructor, props);
var element = ReactElement.createElement(constructor, props);
return ReactMount.render(element, container);
},

Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,10 @@ var AutoFocusMixin = require('AutoFocusMixin');
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');

var keyMirror = require('keyMirror');

// Store a reference to the <button> `ReactDOMComponent`. TODO: use string
var button = ReactElement.createFactory(ReactDOM.button.type);
var button = ReactElement.createFactory('button');

var mouseListenerNames = keyMirror({
onClick: true,
Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ var LocalEventTrapMixin = require('LocalEventTrapMixin');
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');

// Store a reference to the <form> `ReactDOMComponent`. TODO: use string
var form = ReactElement.createFactory(ReactDOM.form.type);
var form = ReactElement.createFactory('form');

/**
* Since onSubmit doesn't bubble OR capture on the top level in IE8, we need
Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMImg.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ var LocalEventTrapMixin = require('LocalEventTrapMixin');
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');

// Store a reference to the <img> `ReactDOMComponent`. TODO: use string
var img = ReactElement.createFactory(ReactDOM.img.type);
var img = ReactElement.createFactory('img');

/**
* Since onLoad doesn't bubble OR capture on the top level in IE8, we need to
Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMInput.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@ var LinkedValueUtils = require('LinkedValueUtils');
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');
var ReactMount = require('ReactMount');
var ReactUpdates = require('ReactUpdates');

var assign = require('Object.assign');
var invariant = require('invariant');

// Store a reference to the <input> `ReactDOMComponent`. TODO: use string
var input = ReactElement.createFactory(ReactDOM.input.type);
var input = ReactElement.createFactory('input');

var instancesByReactID = {};

Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMOption.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,10 @@
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');

var warning = require('warning');

// Store a reference to the <option> `ReactDOMComponent`. TODO: use string
var option = ReactElement.createFactory(ReactDOM.option.type);
var option = ReactElement.createFactory('option');

/**
* Implements an <option> native component that warns when `selected` is set.
Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMSelect.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,11 @@ var LinkedValueUtils = require('LinkedValueUtils');
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');
var ReactUpdates = require('ReactUpdates');

var assign = require('Object.assign');

// Store a reference to the <select> `ReactDOMComponent`. TODO: use string
var select = ReactElement.createFactory(ReactDOM.select.type);
var select = ReactElement.createFactory('select');

function updateWithPendingValueIfMounted() {
/*jshint validthis:true */
Expand Down
4 changes: 1 addition & 3 deletions src/browser/ui/dom/components/ReactDOMTextarea.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,14 @@ var LinkedValueUtils = require('LinkedValueUtils');
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
var ReactClass = require('ReactClass');
var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');
var ReactUpdates = require('ReactUpdates');

var assign = require('Object.assign');
var invariant = require('invariant');

var warning = require('warning');

// Store a reference to the <textarea> `ReactDOMComponent`. TODO: use string
var textarea = ReactElement.createFactory(ReactDOM.textarea.type);
var textarea = ReactElement.createFactory('textarea');

function forceUpdateIfMounted() {
/*jshint validthis:true */
Expand Down
14 changes: 4 additions & 10 deletions src/class/ReactClass.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@

var ReactCompositeComponent = require('ReactCompositeComponent');
var ReactElement = require('ReactElement');
var ReactElementValidator = require('ReactElementValidator');
var ReactLegacyElement = require('ReactLegacyElement');
var ReactPropTypeLocations = require('ReactPropTypeLocations');
var ReactPropTypeLocationNames = require('ReactPropTypeLocationNames');

Expand Down Expand Up @@ -679,14 +677,10 @@ var ReactClass = {
}
}

if (__DEV__) {
return ReactLegacyElement.wrapFactory(
ReactElementValidator.createFactory(Constructor)
);
}
return ReactLegacyElement.wrapFactory(
ReactElement.createFactory(Constructor)
);
// Legacy hook TODO: Warn if this is accessed
Constructor.type = Constructor;

return Constructor;
},

injection: {
Expand Down
24 changes: 24 additions & 0 deletions src/core/ReactCompositeComponent.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,17 @@ var ReactCompositeComponentMixin = {
this.props = this._processProps(this.props);

this.state = this.getInitialState ? this.getInitialState() : null;

if (__DEV__) {
// We allow auto-mocks to proceed as if they're returning null.
if (typeof this.state === 'undefined' &&
this.getInitialState && this.getInitialState._isMockFunction) {
// This is probably bad practice. Consider warning here and
// deprecating this convenience.
this.state = null;
}
}

invariant(
typeof this.state === 'object' && !Array.isArray(this.state),
'%s.getInitialState(): must return an object or null',
Expand Down Expand Up @@ -675,6 +686,15 @@ var ReactCompositeComponentMixin = {
ReactCurrentOwner.current = this;
try {
renderedComponent = this.render();
if (__DEV__) {
// We allow auto-mocks to proceed as if they're returning null.
if (typeof renderedComponent === 'undefined' &&
this.render._isMockFunction) {
// This is probably bad practice. Consider warning here and
// deprecating this convenience.
renderedComponent = null;
}
}
if (renderedComponent === null || renderedComponent === false) {
renderedComponent = ReactEmptyComponent.getEmptyComponent();
ReactEmptyComponent.registerNullComponentID(this._rootNodeID);
Expand Down Expand Up @@ -781,4 +801,8 @@ var ReactCompositeComponent = {

};

// Temporary injection.
// TODO: Delete this hack once implementation details are hidden.
instantiateReactComponent._compositeBase = ReactCompositeComponentBase;

module.exports = ReactCompositeComponent;
1 change: 1 addition & 0 deletions src/core/ReactElement.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ ReactElement.createFactory = function(type) {
// easily accessed on elements. E.g. <Foo />.type === Foo.type.
// This should not be named `constructor` since this may not be the function
// that created the element, and it may not even be a constructor.
// Legacy hook TODO: Warn if this is accessed
factory.type = type;
return factory;
};
Expand Down
1 change: 1 addition & 0 deletions src/core/ReactElementValidator.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ var ReactElementValidator = {
null,
type
);
// Legacy hook TODO: Warn if this is accessed
validatedFactory.type = type;
return validatedFactory;
}
Expand Down
Loading