2016-10-18 6 views
0

Ich versuche, ein Bestätigungsmodal (mit react-confirm) anzuzeigen, um den Benutzer zu warnen, wenn er versucht, zu einem anderen Abschnitt zu wechseln, damit die im Formular ausgefüllten Informationen verloren gehen.React: shouldComponentUpdate warte auf eine asynchrone Operation

die Bestätigung js funktioniert der Code blockieren, so kann ich dies tun:

shouldComponentUpdate(nextProps, nextState) { 
     if (confirm('Hay cambios sin guardar, si continua se perderán. ¿Desea continuar?')) { 
      return true; 
     } else { 
      return false; 
     } 
} 

Aber wenn ich die Bestätigungsverfahren durch die eine der Bibliothek reagieren-confirm ersetzen kann ich nicht auf das Ergebnis warten von diese asynchrone Operation.

async shouldComponentUpdate(nextProps, nextState) { 
    const response = await confirm('Hay cambios sin guardar, si continua se perderán. ¿Desea continuar?', { title: "Cambios sin guardar", okLabbel: "Sí", cancelLabel: "No!" }) 
     .then(
      () => { 
       return true; 
      }, 
      () => { 
       return false; 
      } 
     ); 
    return (response); 

}

Wer weiß, wie kann ich diese bekommen?

+1

Warum rufen Sie die Bestätigung nicht an, wenn Benutzer auf den Link/die Schaltfläche zu einem anderen Abschnitt klicken. Im Erfolgsrückruf können Sie den Benutzer in den neuen Bereich umleiten. – Saleel

+0

Weil ich nicht zu jedem Abschnitt verschiedene Routen verwende. Eine Komponente verwaltet das Rendern der Informationen für jeden Abschnitt. Deshalb versuche ich, somethingComponentUpdate zu verwenden. – Marina

+0

Es gibt also eine Zustandsänderung beim Übergang in einen anderen Abschnitt. Sie haben nextProps, nextState-Parameter in sollteComponentUpdate, so können Sie den Status überprüfen und Ja oder Nein entsprechend zurückgeben. – Saleel

Antwort

0

I beendete die Struktur der App zu ändern auf. Ich verwalte jeden Abschnitt mit einer anderen Route. Also implementiere ich die Bestätigung im Routing statt in der Komponente.

0

Sie sollten einen anderen Weg für dieses Problem verwenden. Nachdem Sie auf eine Schaltfläche oder andere Aktionen geklickt haben, wird ein Modal-/Bestätigungsfenster angezeigt. und fügen Sie dann Eventhandler für dieses Fenster wie:

_onClose(shouldUpdate) { 
    if(shouldUpdate) { 
    this.setState({}); // or this.forceUpdate() 
    } 
} 
Verwandte Themen