diff --git a/src/addons/transitions/ReactCSSTransitionGroup.js b/src/addons/transitions/ReactCSSTransitionGroup.js
index c54d9a7aeb..5b6ce5607c 100644
--- a/src/addons/transitions/ReactCSSTransitionGroup.js
+++ b/src/addons/transitions/ReactCSSTransitionGroup.js
@@ -28,8 +28,6 @@ var ReactCSSTransitionGroupChild = React.createFactory(
require('ReactCSSTransitionGroupChild')
);
-var merge = require('merge');
-
var ReactCSSTransitionGroup = React.createClass({
displayName: 'ReactCSSTransitionGroup',
@@ -63,7 +61,7 @@ var ReactCSSTransitionGroup = React.createClass({
render: function() {
return (
ReactTransitionGroup(
- merge(this.props, {childFactory: this._wrapChild})
+ Object.assign({}, this.props, {childFactory: this._wrapChild})
)
);
}
diff --git a/src/addons/transitions/ReactTransitionGroup.js b/src/addons/transitions/ReactTransitionGroup.js
index 174d389676..1203abb703 100644
--- a/src/addons/transitions/ReactTransitionGroup.js
+++ b/src/addons/transitions/ReactTransitionGroup.js
@@ -23,7 +23,6 @@ var ReactTransitionChildMapping = require('ReactTransitionChildMapping');
var cloneWithProps = require('cloneWithProps');
var emptyFunction = require('emptyFunction');
-var merge = require('merge');
var ReactTransitionGroup = React.createClass({
displayName: 'ReactTransitionGroup',
@@ -159,7 +158,7 @@ var ReactTransitionGroup = React.createClass({
// This entered again before it fully left. Add it again.
this.performEnter(key);
} else {
- var newChildren = merge(this.state.children);
+ var newChildren = Object.assign({}, this.state.children);
delete newChildren[key];
this.setState({children: newChildren});
}
diff --git a/src/addons/update.js b/src/addons/update.js
index 43ec8dd53f..c55f4b13dd 100644
--- a/src/addons/update.js
+++ b/src/addons/update.js
@@ -18,7 +18,6 @@
"use strict";
-var copyProperties = require('copyProperties');
var keyOf = require('keyOf');
var invariant = require('invariant');
@@ -26,7 +25,7 @@ function shallowCopy(x) {
if (Array.isArray(x)) {
return x.concat();
} else if (x && typeof x === 'object') {
- return copyProperties(new x.constructor(), x);
+ return Object.assign(new x.constructor(), x);
} else {
return x;
}
@@ -106,7 +105,7 @@ function update(value, spec) {
COMMAND_MERGE,
nextValue
);
- copyProperties(nextValue, spec[COMMAND_MERGE]);
+ Object.assign(nextValue, spec[COMMAND_MERGE]);
}
if (spec.hasOwnProperty(COMMAND_PUSH)) {
diff --git a/src/browser/ReactBrowserEventEmitter.js b/src/browser/ReactBrowserEventEmitter.js
index 677b076986..62d65347b7 100644
--- a/src/browser/ReactBrowserEventEmitter.js
+++ b/src/browser/ReactBrowserEventEmitter.js
@@ -26,7 +26,6 @@ var ReactEventEmitterMixin = require('ReactEventEmitterMixin');
var ViewportMetrics = require('ViewportMetrics');
var isEventSupported = require('isEventSupported');
-var merge = require('merge');
/**
* Summary of `ReactBrowserEventEmitter` event handling:
@@ -155,7 +154,7 @@ function getListeningForDocument(mountAt) {
*
* @internal
*/
-var ReactBrowserEventEmitter = merge(ReactEventEmitterMixin, {
+var ReactBrowserEventEmitter = Object.assign({}, ReactEventEmitterMixin, {
/**
* Injectable event backend
diff --git a/src/browser/ReactPutListenerQueue.js b/src/browser/ReactPutListenerQueue.js
index 0e2500e499..31256aaaaf 100644
--- a/src/browser/ReactPutListenerQueue.js
+++ b/src/browser/ReactPutListenerQueue.js
@@ -21,13 +21,11 @@
var PooledClass = require('PooledClass');
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
-var mixInto = require('mixInto');
-
function ReactPutListenerQueue() {
this.listenersToPut = [];
}
-mixInto(ReactPutListenerQueue, {
+Object.assign(ReactPutListenerQueue.prototype, {
enqueuePutListener: function(rootNodeID, propKey, propValue) {
this.listenersToPut.push({
rootNodeID: rootNodeID,
diff --git a/src/browser/ReactReconcileTransaction.js b/src/browser/ReactReconcileTransaction.js
index e4ac1ffa02..42c88cbca2 100644
--- a/src/browser/ReactReconcileTransaction.js
+++ b/src/browser/ReactReconcileTransaction.js
@@ -26,8 +26,6 @@ var ReactInputSelection = require('ReactInputSelection');
var ReactPutListenerQueue = require('ReactPutListenerQueue');
var Transaction = require('Transaction');
-var mixInto = require('mixInto');
-
/**
* Ensures that, when possible, the selection range (currently selected text
* input) is not disturbed by performing the transaction.
@@ -174,8 +172,7 @@ var Mixin = {
};
-mixInto(ReactReconcileTransaction, Transaction.Mixin);
-mixInto(ReactReconcileTransaction, Mixin);
+Object.assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
PooledClass.addPoolingTo(ReactReconcileTransaction);
diff --git a/src/browser/ReactTextComponent.js b/src/browser/ReactTextComponent.js
index 25cdd6e1bf..aa2819fff6 100644
--- a/src/browser/ReactTextComponent.js
+++ b/src/browser/ReactTextComponent.js
@@ -25,7 +25,6 @@ var ReactComponent = require('ReactComponent');
var ReactElement = require('ReactElement');
var escapeTextForBrowser = require('escapeTextForBrowser');
-var mixInto = require('mixInto');
/**
* Text nodes violate a couple assumptions that React makes about components:
@@ -46,8 +45,7 @@ var ReactTextComponent = function(props) {
// This constructor and it's argument is currently used by mocks.
};
-mixInto(ReactTextComponent, ReactComponent.Mixin);
-mixInto(ReactTextComponent, {
+Object.assign(ReactTextComponent.prototype, ReactComponent.Mixin, {
/**
* Creates the markup for this text node. This node is not intended to have
diff --git a/src/browser/server/ReactServerRenderingTransaction.js b/src/browser/server/ReactServerRenderingTransaction.js
index 2251f82f96..7b7d8f86b6 100644
--- a/src/browser/server/ReactServerRenderingTransaction.js
+++ b/src/browser/server/ReactServerRenderingTransaction.js
@@ -25,7 +25,6 @@ var ReactPutListenerQueue = require('ReactPutListenerQueue');
var Transaction = require('Transaction');
var emptyFunction = require('emptyFunction');
-var mixInto = require('mixInto');
/**
* Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks
@@ -107,8 +106,11 @@ var Mixin = {
};
-mixInto(ReactServerRenderingTransaction, Transaction.Mixin);
-mixInto(ReactServerRenderingTransaction, Mixin);
+Object.assign(
+ ReactServerRenderingTransaction.prototype,
+ Transaction.Mixin,
+ Mixin
+);
PooledClass.addPoolingTo(ReactServerRenderingTransaction);
diff --git a/src/browser/syntheticEvents/SyntheticEvent.js b/src/browser/syntheticEvents/SyntheticEvent.js
index f6012d59cf..ae3fb6c54b 100644
--- a/src/browser/syntheticEvents/SyntheticEvent.js
+++ b/src/browser/syntheticEvents/SyntheticEvent.js
@@ -23,8 +23,6 @@ var PooledClass = require('PooledClass');
var emptyFunction = require('emptyFunction');
var getEventTarget = require('getEventTarget');
-var merge = require('merge');
-var mergeInto = require('mergeInto');
/**
* @interface Event
@@ -91,7 +89,7 @@ function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {
this.isPropagationStopped = emptyFunction.thatReturnsFalse;
}
-mergeInto(SyntheticEvent.prototype, {
+Object.assign(SyntheticEvent.prototype, {
preventDefault: function() {
this.defaultPrevented = true;
@@ -149,11 +147,11 @@ SyntheticEvent.augmentClass = function(Class, Interface) {
var Super = this;
var prototype = Object.create(Super.prototype);
- mergeInto(prototype, Class.prototype);
+ Object.assign(prototype, Class.prototype);
Class.prototype = prototype;
Class.prototype.constructor = Class;
- Class.Interface = merge(Super.Interface, Interface);
+ Class.Interface = Object.assign({}, Super.Interface, Interface);
Class.augmentClass = Super.augmentClass;
PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);
diff --git a/src/browser/ui/ReactDOMComponent.js b/src/browser/ui/ReactDOMComponent.js
index cbbe776d3d..a7536c71c7 100644
--- a/src/browser/ui/ReactDOMComponent.js
+++ b/src/browser/ui/ReactDOMComponent.js
@@ -33,8 +33,6 @@ var escapeTextForBrowser = require('escapeTextForBrowser');
var invariant = require('invariant');
var isEventSupported = require('isEventSupported');
var keyOf = require('keyOf');
-var merge = require('merge');
-var mixInto = require('mixInto');
var monitorCodeUse = require('monitorCodeUse');
var deleteListener = ReactBrowserEventEmitter.deleteListener;
@@ -207,7 +205,7 @@ ReactDOMComponent.Mixin = {
} else {
if (propKey === STYLE) {
if (propValue) {
- propValue = props.style = merge(props.style);
+ propValue = props.style = Object.assign({}, props.style);
}
propValue = CSSPropertyOperations.createMarkupForStyles(propValue);
}
@@ -356,7 +354,7 @@ ReactDOMComponent.Mixin = {
}
if (propKey === STYLE) {
if (nextProp) {
- nextProp = nextProps.style = merge(nextProp);
+ nextProp = nextProps.style = Object.assign({}, nextProp);
}
if (lastProp) {
// Unset styles on `lastProp` but not on `nextProp`.
@@ -465,9 +463,12 @@ ReactDOMComponent.Mixin = {
};
-mixInto(ReactDOMComponent, ReactComponent.Mixin);
-mixInto(ReactDOMComponent, ReactDOMComponent.Mixin);
-mixInto(ReactDOMComponent, ReactMultiChild.Mixin);
-mixInto(ReactDOMComponent, ReactBrowserComponentMixin);
+Object.assign(
+ ReactDOMComponent.prototype,
+ ReactComponent.Mixin,
+ ReactDOMComponent.Mixin,
+ ReactMultiChild.Mixin,
+ ReactBrowserComponentMixin
+);
module.exports = ReactDOMComponent;
diff --git a/src/browser/ui/ReactEventListener.js b/src/browser/ui/ReactEventListener.js
index 5dc6683bb7..c032b5483e 100644
--- a/src/browser/ui/ReactEventListener.js
+++ b/src/browser/ui/ReactEventListener.js
@@ -28,7 +28,6 @@ var ReactUpdates = require('ReactUpdates');
var getEventTarget = require('getEventTarget');
var getUnboundedScrollPosition = require('getUnboundedScrollPosition');
-var mixInto = require('mixInto');
/**
* Finds the parent React component of `node`.
@@ -54,7 +53,7 @@ function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
this.nativeEvent = nativeEvent;
this.ancestors = [];
}
-mixInto(TopLevelCallbackBookKeeping, {
+Object.assign(TopLevelCallbackBookKeeping.prototype, {
destructor: function() {
this.topLevelType = null;
this.nativeEvent = null;
diff --git a/src/browser/ui/__tests__/ReactDOMComponent-test.js b/src/browser/ui/__tests__/ReactDOMComponent-test.js
index 3da6798f7a..7e5274c9f7 100644
--- a/src/browser/ui/__tests__/ReactDOMComponent-test.js
+++ b/src/browser/ui/__tests__/ReactDOMComponent-test.js
@@ -224,7 +224,6 @@ describe('ReactDOMComponent', function() {
var ReactDefaultInjection = require('ReactDefaultInjection');
ReactDefaultInjection.inject();
- var mixInto = require('mixInto');
var ReactDOMComponent = require('ReactDOMComponent');
var ReactReconcileTransaction = require('ReactReconcileTransaction');
@@ -232,7 +231,7 @@ describe('ReactDOMComponent', function() {
this.props = initialProps || {};
this._rootNodeID = 'test';
};
- mixInto(NodeStub, ReactDOMComponent.Mixin);
+ Object.assign(NodeStub.prototype, ReactDOMComponent.Mixin);
genMarkup = function(props) {
var transaction = new ReactReconcileTransaction();
@@ -275,7 +274,6 @@ describe('ReactDOMComponent', function() {
beforeEach(function() {
require('mock-modules').dumpCache();
- var mixInto = require('mixInto');
var ReactDOMComponent = require('ReactDOMComponent');
var ReactReconcileTransaction = require('ReactReconcileTransaction');
@@ -283,7 +281,7 @@ describe('ReactDOMComponent', function() {
this.props = initialProps || {};
this._rootNodeID = 'test';
};
- mixInto(NodeStub, ReactDOMComponent.Mixin);
+ Object.assign(NodeStub.prototype, ReactDOMComponent.Mixin);
genMarkup = function(props) {
var transaction = new ReactReconcileTransaction();
@@ -312,7 +310,6 @@ describe('ReactDOMComponent', function() {
beforeEach(function() {
require('mock-modules').dumpCache();
- var mixInto = require('mixInto');
var ReactComponent = require('ReactComponent');
var ReactMultiChild = require('ReactMultiChild');
var ReactDOMComponent = require('ReactDOMComponent');
@@ -321,9 +318,9 @@ describe('ReactDOMComponent', function() {
var StubNativeComponent = function(element) {
ReactComponent.Mixin.construct.call(this, element);
};
- mixInto(StubNativeComponent, ReactComponent.Mixin);
- mixInto(StubNativeComponent, ReactDOMComponent.Mixin);
- mixInto(StubNativeComponent, ReactMultiChild.Mixin);
+ Object.assign(StubNativeComponent.prototype, ReactComponent.Mixin);
+ Object.assign(StubNativeComponent.prototype, ReactDOMComponent.Mixin);
+ Object.assign(StubNativeComponent.prototype, ReactMultiChild.Mixin);
mountComponent = function(props) {
var transaction = new ReactReconcileTransaction();
diff --git a/src/browser/ui/dom/components/ReactDOMInput.js b/src/browser/ui/dom/components/ReactDOMInput.js
index a653d375d6..a6fbc5c530 100644
--- a/src/browser/ui/dom/components/ReactDOMInput.js
+++ b/src/browser/ui/dom/components/ReactDOMInput.js
@@ -29,7 +29,6 @@ var ReactMount = require('ReactMount');
var ReactUpdates = require('ReactUpdates');
var invariant = require('invariant');
-var merge = require('merge');
// Store a reference to the `ReactDOMComponent`. TODO: use string
var input = ReactElement.createFactory(ReactDOM.input.type);
@@ -74,7 +73,7 @@ var ReactDOMInput = ReactCompositeComponent.createClass({
render: function() {
// Clone `this.props` so we don't mutate the input.
- var props = merge(this.props);
+ var props = Object.assign({}, this.props);
props.defaultChecked = null;
props.defaultValue = null;
diff --git a/src/browser/ui/dom/components/ReactDOMSelect.js b/src/browser/ui/dom/components/ReactDOMSelect.js
index dfd5d8d665..b385b2ba59 100644
--- a/src/browser/ui/dom/components/ReactDOMSelect.js
+++ b/src/browser/ui/dom/components/ReactDOMSelect.js
@@ -26,8 +26,6 @@ var ReactElement = require('ReactElement');
var ReactDOM = require('ReactDOM');
var ReactUpdates = require('ReactUpdates');
-var merge = require('merge');
-
// Store a reference to the