Skip to content

Commit

Permalink
Merge pull request #59 from joshbeam-wf/abstract-transition-set-state…
Browse files Browse the repository at this point in the history
…-warning

UIP-2186 Don't call setState when AbstractTransitionComponent is unmounting
  • Loading branch information
leviwith-wf authored Mar 31, 2017
2 parents e3ba50e + b7a2bf4 commit 1986adf
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
10 changes: 9 additions & 1 deletion lib/src/component/abstract_transition.dart
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,16 @@ abstract class AbstractTransitionComponent<T extends AbstractTransitionProps, S
}
}

var _isMounted = false;

@override
void componentDidMount() {
_isMounted = true;
}

@override
void componentWillUnmount() {
_isMounted = false;
_cancelTransitionEventListener();
}

Expand Down Expand Up @@ -350,7 +358,7 @@ abstract class AbstractTransitionComponent<T extends AbstractTransitionProps, S
_cancelTransitionEndTimer();
} else {
onNextTransitionEnd(() {
if (state.transitionPhase == TransitionPhase.HIDING) {
if (_isMounted && state.transitionPhase == TransitionPhase.HIDING) {
setState(newState()
..transitionPhase = TransitionPhase.HIDDEN
);
Expand Down
20 changes: 20 additions & 0 deletions test/over_react/component/abstract_transition_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,18 @@ main() {
rejectValidationWarning(anything);
});
});

test('does not set hidden state when not mounted', () async {
var renderedInstance = render(Transitioner());
TransitionerComponent transitioner = getDartComponent(renderedInstance);
transitioner.setState(transitioner.newState()..transitionPhase = TransitionPhase.HIDING);

transitioner.handleHiding();
transitioner.componentWillUnmount();
await triggerTransitionEnd(transitioner.getTransitionDomNode());

expect(transitioner.transitionPhasesSet, orderedEquals([TransitionPhase.HIDING]));
});
});
}

Expand Down Expand Up @@ -583,4 +595,12 @@ class TransitionerComponent extends AbstractTransitionComponent<TransitionerProp
props.onHandleHidden();
}
}

List<TransitionPhase> transitionPhasesSet = [];

@override
void setState(dynamic newState, [callback()]) {
super.setState(newState, callback);
transitionPhasesSet.add(newState.transitionPhase);
}
}

0 comments on commit 1986adf

Please sign in to comment.