私は、反応ルータのナビゲーションに関連する問題を抱えています。私のナビゲーションには2つのメニューのログインと登録があり、私のインデックスページはログインです。ReactJs React-Router Navigation
emaildとパスワードの値を入力してログインボタンを入力すると、sessionValueとして出力されます。私のsessionValueはserverSideから返されたusernameで、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);
});
}
},
質問:
- /非表示ログイン/ログアウトメニューを表示する方法について説明します。 ログインショーログアウトメニューの後
- 、我々はログアウトメニューのショーのログインメニューで
あなたは状態を管理するために何を使用していますか?どのコードスニペットも状態管理を示していません。おそらく、ローカルストレージの内容を 'componentWillMount'ライフサイクルコールバックで状態にロードしたいと思うでしょう。 – speckledcarp
私のセッション値は、ログインコンポーネントにあるhandleSubmit関数のコールバック関数のサーバー側から来ます。 –
そして私はローカルストレージに値を保存しようとしました。 NAVコンポーネントでもその値が得られます。 ログイン(送信)ボタンをクリックしても動作しません。 しかし、ページをリフレッシュするか、ページに戻ると、ログアウトメニューが表示されます。再レンダリング後の値がローカルストアに入るためです。私を助けてもらえますか?私はそれに立ち往生しています。 –