2016-07-20 5 views

Antwort

5

Eine bessere Möglichkeit ist die folgenden routerWillLeave Haken zu erstellen, wenn Sie bereits react-router verwenden.

componentDidMount() { 
    this.props.router.setRouteLeaveHook(this.props.route, this.beforeUnload); 
} 

routerWillLeave(e) { 
    // check for a condition here 
    if (this.state.allowLeave === false) { 
    const message = 'Are you sure?'; 
    (e || window.event).returnValue = message; 
    return message; 
    } 
} 

auch um sicherzustellen, dass this.props.router verfügbar ist, müssen Sie die Komponente als exportieren:

export default withRouter(MyComponent); 

docs auf https://github.com/reactjs/react-router/blob/master/docs/guides/ConfirmingNavigation.md See.

+0

Danke für Hilfe! Ich versuche oben genannte Methode, und es wirft folgenden Fehler, createTransitionManager.js? Aa7a: 133 Uncaught TypeError: Kann nicht lesen '\ _ \ _ id \ _ \ _' von undefined –

+0

@RamanChoudhary Das sieht aus wie ein Problem in dein Code. Ich habe 'id' nirgends eingeführt – activatedgeek

+0

dieser Fehler kommt von createTransitionManager.js, kann nicht lesen Eigenschaft '\ _ \ _ ID \ _ \ _' von undefined. Übrigens, ich vergessen zu erwähnen, ist dies nicht direkt verbunden mit '' Es ist ein direkter Nachkomme von Seite Komponente . –

1

Es gibt keine Möglichkeit, das Aushängen der Komponente zu verhindern. Sie können window.onbeforeunload verwenden, um zu verhindern, dass Benutzer die aktuelle Registerkarte schließt und Daten im Hintergrund unterspeichert. So mache ich es in meiner App.

Wenn window.onbeforeunload irgendetwas zurückgibt, außer undefined, wird ein Bestätigungsdialogfeld ausgelöst.

window.onbeforeunload =() => 'Are you sure?';