Ich bin mit einigen Problemen im Zusammenhang mit der Navigation react-Router fest. In meiner Navigation gibt es 2 Menü Login und registrieren, und meine Indexseite ist Login.ReactJs React-Router Navigation
Auf der Anmeldeseite nach Eingabe des Wertes von emaild und Passwort und Absenden der Login-Schaltfläche wird die Ausgabe als sessionValue.My sessionValue ist der Benutzername, der von serverSide zurückkehrt und auf die TodoApp-Seite umleitet. Nach der Anmeldung wurde auf die TodoApp-Seite umgeleitet. Ich möchte das Logout-Menü anzeigen, anstatt mich in der Navigation einzuloggen.
Mein Code ist wie folgt:
app.jsxReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={Main}>
<Route path="RegistrationForm" component={RegistrationForm}/>
<Route path="todoapp/:sessionValue"component={TodoApp}/>
<IndexRoute component={Login}/>
</Route>
</Router>,
document.getElementById('app')
);
Navigationskomponente
Ich habe versucht, dies durch localstorage verwenden, aber es funktioniert nicht. Es funktioniert nur, wenn ich den Rückwärtspfeil des Browsers angeklickt habe.
var Nav= React.createClass({
render:function(){
var strUserName = localStorage.getItem('sessionValue');
console.log(strUserName);
function loginMenu(){
if(strUserName){
return <Link to="/RegistrationForm" activeClassName="active" activeStyle={{fontWeight: 'bold'}}>Logout</Link>
}
else{
return <IndexLink to="/" activeClassName="active" activeStyle={{fontWeight: 'bold'}}>LogIn</IndexLink>
}
}
return(
<div className="top-bar">
<div className="top-bar-left">
<ul className="menu">
<li className="menu-text">
React App
</li>
<li>
{loginMenu()}
</li>
<li>
<Link to="/RegistrationForm" activeClassName="active" activeStyle={{fontWeight: 'bold'}}>Signup</Link>
</li>
</ul>
</div>
</div>
);
}
});
module.exports=Nav;
Login-Seite (login.jsx)
if(validForm){
axios.post('/login', {
email:this.state.strEmail,
password:this.state.strPassword
})
.then(function (response) {
//console.log(response.data);
var sessionValue=response.data;
//After login todoApp page is open and with session value.session value passed through url to todoApp.
browserHistory.push(`todoapp/${sessionValue}`);
localStorage.setItem('sessionValue',sessionValue);
})
.catch(function (error) {
console.log(error);
});
}
},
Fragen:
- wie Login/Logout-Menü anzuzeigen/auszublenden.
- nach dem Abmelden Menü Login-Show und wenn wir auf Logout-Menü anzeigen Anmelden Menü klicken
Was verwenden Sie, um den Status zu verwalten? Keines Ihrer Code-Snippets zeigt eine Statusverwaltung an. Wahrscheinlich möchten Sie Ihre lokalen Speicherinhalte in einen 'componentWillMount'-Lebenszyklus-Callback laden. – speckledcarp
Mein Sitzungswert stammt von der Serverseite in der Callback-Funktion in der handleSubmit-Funktion, die sich in der Login-Komponente befindet. –
Und ich habe versucht, Wert im lokalen Speicher zu speichern. Ich bekomme diesen Wert auch in der NAV-Komponente. Wenn ich auf Login (Senden) klicken, funktioniert es nicht. Aber wenn ich meine Seite aktualisiere oder auf die rückwärtige Seite gehe, erscheint das Abmelde-Menü. Weil nach dem Rendern des Wertes in den lokalen Speicher gelangt. Kannst du mir bitte helfen? Ich bleibe dabei. –