2017-02-01 12 views
0

私はcreate-react-appを使ってクライアント側のアプリケーションを開発しています。アプリケーションは、基本的なフォームでログインコンポーネントをレンダリングし、ログインに成功すると、別のコンポーネント(メインアプリケーションになる)をロードします。Reactでログインを処理する基本的な方法

まず、の検証とログインロジックは問題にはなりません。まず、ログインコンポーネントをマウント解除し、送信イベントで別のコンポーネントをロードする簡単な方法を見つけようとしているからです。提出したイベントに(私はこの例ではMain.jsと呼ばれる)別のコンポーネントに切り替えるための最も簡単な方法だろう何

class Login extends Component { 

    handleLogin(){ 
     // trigger to load Main.js 
    } 

    render() { 
     return (
      // form elements here 

      <div className="submit"> 
       <input className="button-signin" value="Sign In" type="submit" 
        onClick={this.handleLogin}/> 
       </div> 
      ); 
    } 
} 

+0

ルーティングまたはリダイレクトしますか?リダイレクトとは、window.locationを変更したいように聞こえるからです。 – awiebe

+0

混乱して申し訳ありませんが、リダイレクトを使用するつもりはないので、リダイレクトの代わりに「別のコンポーネントを読み込む」という言葉を改めました。ログインコンポーネントをマウント解除してメインアプリケーションコンポーネントをマウントできるだけなら、私は満足しています。しかし、ルーティングが行く方法なら、それは私が探しているものです。 – cinnaroll45

答えて

2

React routerを試しましたか?ルートを定義し、それぞれにコンポーネントを割り当てるのは簡単です。次に、各ルートにアクセスするための条件を設定することもできます。 There is an example in the official docsあなたの要件に合っているようです。

<Router history={withExampleBasename(browserHistory, __dirname)}> 
<Route path="/" component={App}> 
    <Route path="login" component={Login} /> 
    <Route path="logout" component={Logout} /> 
    <Route path="about" component={About} /> 
    <Route path="dashboard" component={Dashboard} onEnter={requireAuth} /> 
</Route> 

方法requireAuthは、あなたが(コンポーネントDashboardが表示されます)ルートdashboardにアクセスしようとするたびにチェックされます。トークンベースの認証を使用している場合は、トークンをlocalStorageに保存し、それがrequireAuthに存在するかどうかを確認することができます。

handleLoginあなたのメソッドhandleLoginは、バックエンドを呼び出し、ログインを処理する場合はlocalStorageにトークンを格納してから、ダッシュボードルートにリダイレクトします。

+0

私はそれが範囲外であることは知っていますが、私はBrowserHistoryとHashHistoryでいくつかの例を見ています。どちらもうまくいくようですが、クライアントサイドのプロジェクトではどちらかを優先していますか? – cinnaroll45

+1

[ここ](https://github.com/ReactTraining/react-router/blob/master/docs/guides/Histories.md#browserhistory)の違い​​が見つかります。それらの間にはいくつかの違いがあります。基本的には、HashHistoryを使い始める方が簡単ですが、URLがよりクリーンなので、BrowserHistoryをプロダクションで使用する必要があります。 –

関連する問題