2016-07-05 9 views
0

So habe ich einen Router wie folgt aus:Holen Sie sich einen falschen Zustand in reagieren-Router

const Routes = (props) => { 
    const { store } = props; 
    const { loggedIn } = props; 
    const checkAuth = (nextState, replace) => { 
    auth.checkAuth(nextState, replace, loggedIn); 
    }; 
    return (
    <Provider store={store}> 
     <Router history={browserHistory}> 
     <Route component={App}> 
      <Route path="/" component={HomePage} /> 
      <Route path="login" component={LoginPage} /> 
      <Route onEnter={checkAuth}> 
      <Route path="about" component={AboutPage} /> 
      <Route path="help" component={HelpPage} /> 
      <Route path="help/new" component={HelpForm} /> 
      </Route> 
     </Route> 
     </Router> 
    </Provider> 
); 
}; 

Routes.propTypes = { 
    loggedIn: PropTypes.bool.isRequired, 
    store: PropTypes.object.isRequired, 
}; 

function mapStateToProps(state) { 
    return { 
    loggedIn: state.user.loggedIn, 
    }; 
} 

export default connect(mapStateToProps)(Routes); 

Beachten Sie, dass ich Requisiten: const { loggedIn } = props;

nun eine Aktion jedes Mal wenn ich schicken, ich sehe in redux debugger dass der Zustand sich geändert hat. Aber nachdem ich auf einen Link geklickt habe, der in checkAuth nicht erlaubt ist, bekomme ich einen Fehler und es leitet mich zurück zur Login-Seite.

Ich habe console.log hier:

const checkAuth = (nextState, replace) => { 
    console.log("from checkAuth: " + loggedIn); 
    auth.checkAuth(nextState, replace, loggedIn); 
    }; 

aber das Ergebnis ist falsch.

Meine Frage ist, warum die loggedIn in den Routen nicht aktualisiert wird?

Danke!

Antwort

0

Ich habe endlich meine Verbindung entfernt, da es sich nicht richtig für Router verwendet werden. Ich benutze auch store.getState() anstelle von Requisiten und es funktioniert.

Ich glaube nicht, dass meine Antwort perfekt ist. Also, wenn jemand besser antworten oder Weg, bitte posten Sie die Antwort :)

Verwandte Themen