mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-18 19:21:34 +08:00
fix(react): remove hardware back button event listener when NavManager is unmounted (#23224)
resolves #23170
This commit is contained in:
@ -33,6 +33,8 @@ interface NavManagerProps {
|
||||
}
|
||||
|
||||
export class NavManager extends React.PureComponent<NavManagerProps, NavContextState> {
|
||||
_isMounted = false;
|
||||
|
||||
ionRouterContextValue: IonRouterContextState = {
|
||||
push: (
|
||||
pathname: string,
|
||||
@ -68,15 +70,31 @@ export class NavManager extends React.PureComponent<NavManagerProps, NavContextS
|
||||
};
|
||||
|
||||
if (typeof document !== 'undefined') {
|
||||
document.addEventListener('ionBackButton', (e: any) => {
|
||||
e.detail.register(0, (processNextHandler: () => void) => {
|
||||
this.nativeGoBack();
|
||||
processNextHandler();
|
||||
});
|
||||
});
|
||||
this.handleHardwareBackButton = this.handleHardwareBackButton.bind(this);
|
||||
document.addEventListener('ionBackButton', this.handleHardwareBackButton);
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this._isMounted = true;
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if (typeof document !== 'undefined') {
|
||||
document.removeEventListener('ionBackButton', this.handleHardwareBackButton);
|
||||
this._isMounted = false;
|
||||
}
|
||||
}
|
||||
|
||||
handleHardwareBackButton(e: any) {
|
||||
e.detail.register(0, (processNextHandler: () => void) => {
|
||||
if (this._isMounted) {
|
||||
this.nativeGoBack();
|
||||
processNextHandler();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
goBack(route?: string | RouteInfo, animationBuilder?: AnimationBuilder) {
|
||||
this.props.onNavigateBack(route, animationBuilder);
|
||||
}
|
||||
|
Reference in New Issue
Block a user