2016-08-04 12 views
0

ich eine gerade foward Login-Seite habe, die einen api-Dienst ruft die Benutzeranmeldung zu überprüfen:ReactJs - Warnung bei Seite nach erfolgreicher Anmeldung Übergang aus

Login.js

@connect(
    state => ({user: state.auth.user}), 
    authActions) 
class Login extends React.Component { 

    ...... 

    _handleSubmit = (event) => { 
    ..... 
    this.props.login({username: username.value, password: password.value}, 
    (result) => { 
     return result; 
    }); 
    ...... 
    }; 

    render() { 
    const {user, logout} = this.props; 
    return (
     <section> 
     { 
      !user ? 
      ... Show login page with submit button ..... 

      : this.context.router.replace('/') 
     } 
     </section> 
    ) 
    } 
}; 

Während die Komponente funktioniert wie beabsichtigt, erhalte ich die Warnung:

nicht während einer bestehenden Zustandsübergang (wie inaktualisieren könnenrender oder der Konstruktor einer anderen Komponente). Render-Methoden sollten eine reine Funktion von Requisiten und Zustand sein; Konstruktor Nebenwirkungen sind ein anti-Muster, können aber

Ich weiß, dass die Warnung aufgrund des ersetzen Zustand des Routers componentWillMount bewegt werden, aber ich weiß nicht, was der beste Weg wäre, verhindern Sie diese Warnung und erreichen Sie immer noch das Ziel, sich von der Anmeldeseite zu entfernen, wenn der Benutzer existiert.

Irgendwelche Ideen?

UPDATE

Abdud Dayan Adeeb die Lösung hatte .....

componentWillReceiveProps(nextProps) { 
    if (nextProps.user) this.context.router.replace('/') 
    } 
+0

den Code bewegen sollten in componentWillUnmount platziert werden – Teo

Antwort

0

Das Problem, das ich hier zu sehen ist, dass Sie einen Übergang zu versuchen, versuchen, wenn die Komponente Rendering/Aktualisierung.

Das Beste, was zu tun wäre, um den Übergang Logik auf die componenetWillReceiveProps Funktion Ihrer Komponente

componenentWillReceiveProps(nextProps) { 
    if (nextProps.user) this.context.router.replace('/') 
} 
+0

componentWillMount nicht nach einreichen getroffen zu werden. FYI, die Submit-Methode hat eine e.preventDefault() –

+0

Sie können immer noch 'componentWillUpdate' verwenden. Sowohl 'componentWillUpdate' als auch' componentWillMount' werden vor dem Rendern aufgerufen. 'componentWillMount' wird nur vor dem ersten Rendern aufgerufen und' componentWillUpdate' wird bei jedem nachfolgenden rerender aufgerufen. –

+0

Da Sie redux verwenden und das One-Way-Datenflussmodell streng befolgen. Am besten verwenden Sie 'componentWillReceiveProps (nextProps)' –

Verwandte Themen