【发布时间】:2017-10-14 22:40:13
【问题描述】:
我遇到了一些与 react-router Navigation 相关的问题。在我的导航中有2个菜单登录和注册,我的索引页面是登录。
在登录页面上输入电子邮件和密码的值并提交登录按钮后,它会输出为 sessionValue。我的 sessionValue 是从服务器端返回的用户名,它重定向到 TodoApp 页面。登录后重定向到 TodoApp 页面。我想在导航中显示注销菜单而不是登录。
我的代码如下:
app.jsx
ReactDOM.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')
);
导航组件
我通过使用 localstorage 进行了尝试,但它不起作用。只有当我点击浏览器的向后箭头时它才有效。
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.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);
});
}
},
问题:
- 如何显示/隐藏登录/注销菜单。
- 登录后显示注销菜单,当我们点击注销菜单时显示登录菜单
【问题讨论】:
-
你用什么来管理状态?您的代码 sn-ps 都没有显示任何状态管理。您可能希望将本地存储内容加载到
componentWillMount生命周期回调中的状态。 -
我的会话值来自登录组件中handleSubmit函数的回调函数中的服务器端。
-
我尝试在本地存储中存储价值。我在 NAV 组件中也得到了这个值。当我单击登录(提交)按钮时,它不起作用。但是当我刷新我的页面或转到后退页面时,会出现注销菜单。因为重新渲染后的值会进入本地存储。你能帮帮我吗?我被它困住了。
标签: reactjs navigation react-router