diff --git a/src/addons/transitions/ReactTransitionGroup.js b/src/addons/transitions/ReactTransitionGroup.js
index 1c43671d9f..f77f63a1cd 100644
--- a/src/addons/transitions/ReactTransitionGroup.js
+++ b/src/addons/transitions/ReactTransitionGroup.js
@@ -61,15 +61,15 @@ var ReactTransitionGroup = React.createClass({
var key;
for (key in nextChildMapping) {
- if (!prevChildMapping.hasOwnProperty(key) &&
- !this.currentlyTransitioningKeys[key]) {
+ var hasPrev = prevChildMapping && prevChildMapping.hasOwnProperty(key);
+ if (!hasPrev && !this.currentlyTransitioningKeys[key]) {
this.keysToEnter.push(key);
}
}
for (key in prevChildMapping) {
- if (!nextChildMapping.hasOwnProperty(key) &&
- !this.currentlyTransitioningKeys[key]) {
+ var hasNext = nextChildMapping && nextChildMapping.hasOwnProperty(key);
+ if (!hasNext && !this.currentlyTransitioningKeys[key]) {
this.keysToLeave.push(key);
}
}
diff --git a/src/addons/transitions/__tests__/ReactCSSTransitionGroup-test.js b/src/addons/transitions/__tests__/ReactCSSTransitionGroup-test.js
index 2bf5da4154..ef06239501 100644
--- a/src/addons/transitions/__tests__/ReactCSSTransitionGroup-test.js
+++ b/src/addons/transitions/__tests__/ReactCSSTransitionGroup-test.js
@@ -142,4 +142,25 @@ describe('ReactCSSTransitionGroup', function() {
container
);
});
+
+ it('should transition from one to null', function() {
+ var a = React.renderComponent(
+
+
+ ,
+ container
+ );
+ expect(a.getDOMNode().childNodes.length).toBe(1);
+ React.renderComponent(
+
+ {null}
+ ,
+ container
+ );
+ // (Here, we expect the original child to stick around but test that no
+ // exception is thrown)
+ expect(a.getDOMNode().childNodes.length).toBe(1);
+ expect(a.getDOMNode().childNodes[0].id).toBe('one');
+ });
+
});