diff --git a/src/addons/transitions/ReactTransitionGroup.js b/src/addons/transitions/ReactTransitionGroup.js
index 4bc19d2702..98ce8619e9 100644
--- a/src/addons/transitions/ReactTransitionGroup.js
+++ b/src/addons/transitions/ReactTransitionGroup.js
@@ -62,8 +62,9 @@ var ReactTransitionGroup = React.createClass({
var children = {};
var childMapping = ReactTransitionKeySet.getChildMapping(sourceChildren);
+ var prevKeys = this._transitionGroupCurrentKeys;
var currentKeys = ReactTransitionKeySet.mergeKeySets(
- this._transitionGroupCurrentKeys,
+ prevKeys,
ReactTransitionKeySet.getKeySet(sourceChildren)
);
@@ -73,7 +74,7 @@ var ReactTransitionGroup = React.createClass({
// may look up an old key in the new children, and it may switch to
// undefined. React's reconciler will keep the ReactTransitionableChild
// instance alive such that we can animate it.
- if (childMapping[key] || this.props.transitionLeave) {
+ if (childMapping[key] || (this.props.transitionLeave && prevKeys[key])) {
children[key] = ReactTransitionableChild({
name: this.props.transitionName,
enter: this.props.transitionEnter,
diff --git a/src/addons/transitions/__tests__/ReactTransitionGroup-test.js b/src/addons/transitions/__tests__/ReactTransitionGroup-test.js
index c7a057e4ca..ab0fb369ab 100644
--- a/src/addons/transitions/__tests__/ReactTransitionGroup-test.js
+++ b/src/addons/transitions/__tests__/ReactTransitionGroup-test.js
@@ -118,13 +118,20 @@ describe('ReactTransitionGroup', function() {
expect(a.getDOMNode().childNodes[1].id).toBe('two');
});
- describe('with an undefined child', function () {
- it('should fail silently', function () {
- React.renderComponent(
-
- ,
- container
- );
- });
+ it('should work with no children', function () {
+ React.renderComponent(
+
+ ,
+ container
+ );
+ });
+
+ it('should work with a null child', function () {
+ React.renderComponent(
+
+ {[null]}
+ ,
+ container
+ );
});
});