Skip to content

Commit

Permalink
Use setState transaction for TransitionGroup instead of extra property
Browse files Browse the repository at this point in the history
  • Loading branch information
sophiebits committed Apr 1, 2015
1 parent 205273d commit 08e4420
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 17 deletions.
14 changes: 5 additions & 9 deletions src/addons/transitions/ReactTransitionGroup.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,6 @@ var ReactTransitionGroup = React.createClass({
},

componentDidUpdate: function() {
this.updatedChildren = null;

var keysToEnter = this.keysToEnter;
this.keysToEnter = [];
keysToEnter.forEach(this.performEnter);
Expand Down Expand Up @@ -195,13 +193,11 @@ var ReactTransitionGroup = React.createClass({
// This entered again before it fully left. Add it again.
this.performEnter(key);
} else {
// As this.state.children will not be updated until next render, we keep
// this.updatedChildren state to avoid losing all but the last removal.
// It's cleaned after this.state is updated, in componentDidUpdate.
if (!this.updatedChildren)
this.updatedChildren = assign({}, this.state.children);
delete this.updatedChildren[key];
this.setState({children: this.updatedChildren});
this.setState(function(state) {
var newChildren = assign({}, state.children);
delete newChildren[key];
return {children: newChildren};
});
}
},

Expand Down
16 changes: 8 additions & 8 deletions src/addons/transitions/__tests__/ReactTransitionGroup-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,24 +215,24 @@ describe('ReactTransitionGroup', function() {

var Child = React.createClass({
componentDidMount: function() {
log.push('didMount'+this.props.id);
log.push('didMount' + this.props.id);
},
componentWillEnter: function(cb) {
log.push('willEnter'+this.props.id);
log.push('willEnter' + this.props.id);
cb();
},
componentDidEnter: function() {
log.push('didEnter'+this.props.id);
log.push('didEnter' + this.props.id);
},
componentWillLeave: function(cb) {
log.push('willLeave'+this.props.id);
log.push('willLeave' + this.props.id);
cb();
},
componentDidLeave: function() {
log.push('didLeave'+this.props.id);
log.push('didLeave' + this.props.id);
},
componentWillUnmount: function() {
log.push('willUnmount'+this.props.id);
log.push('willUnmount' + this.props.id);
},
render: function() {
return <span />;
Expand All @@ -258,14 +258,14 @@ describe('ReactTransitionGroup', function() {

instance.setState({count: 3});
expect(log).toEqual([
'didMount1', 'didMount2', 'willEnter1', 'didEnter1',
'didMount1', 'didMount2', 'willEnter1', 'didEnter1',
'willEnter2', 'didEnter2'
]);
log = [];

instance.setState({count: 0});
expect(log).toEqual([
'willLeave0', 'didLeave0', 'willLeave1', 'didLeave1',
'willLeave0', 'didLeave0', 'willLeave1', 'didLeave1',
'willLeave2', 'didLeave2', 'willUnmount0', 'willUnmount1', 'willUnmount2'
]);
});
Expand Down

0 comments on commit 08e4420

Please sign in to comment.