2016-04-19 12 views
0

ユーザーがボタンをクリックしたときに、012JSの経路を変更する方法を探しています。react-routerを使用しています。ReactJS:クリックイベントに基づいて経路を変更する

var React = require('react'); 
var ReactDOM = require('react-dom'); 
var {Route, Router, IndexRoute, hashHistory, browserHistory} = require('react-router'); 
var {Link, IndexLink} = require('react-router'); 

var Main = React.createClass({ 
    render: function(){ 
     return(
      <div> 
       <header> 
        <Router history={hashHistory}> 
         <Route path='/' component={Splash}></Route> 
         <Route path='login' component={Login}/> 
        </Router> 
       </header> 
       <footer> 
        <Button_/> 
       </footer> 
      </div> 
     ); 
    } 
}); 

var Login = React.createClass({ 
    render: function(){ 

     return(
      <div>This is the login component</div> 
     ); 
    } 
}); 

var Button_ = React.createClass({ 

    handleClick: function(e){ 
     e.preventDefault(); 
    }, 

    render: function(){ 
     return(
      <Link to='/login' activeClassName='active'>LOGIN</Link> 
     ); 
    } 
}); 

var Splash = React.createClass({ 

    render: function(){ 

     return(
      <div>This is the Splash component</div> 
     ); 
    } 

}); 

ReactDOM.render(<Main/>, document.getElementById('app')); 

あなたはおそらく今では見ることができるように、Splashコンポーネントがページに表示されるデフォルトのいずれかになります。ここでは

は、関連するコード(部品の詳細は簡潔にするために省略されている)私のjsxファイルからです。ユーザーがButton_コンポーネントのLinkをクリックすると、SplashコンポーネントがDOMのLoginコンポーネントに置き換えられます。

私がテストするためにPythonのサーバーを実行しているので、URLはhttp://localhost:8000/public/#/?_k=hqkhl0

私は現在、私はそれがやりたいしませんしたコードのように見えます。手動でhttp://localhost:8000/public/#/loginと入力すると、ページは変わりますが、ボタンをクリックしても機能しません。

また、 'Button_'の 'handleClick'機能内でbrowserHistory.push()を使用してページを手動で変更しようとしましたが(正確な場所にonClickプロパティを追加しました)、これは私の望む結果をもたらしませんでした。

私が最初にこれは明らかに、http://localhost:8000/#/loginへのリダイレクトには適切ではない結果

browserHistory.push('/#/login'); 

を試してみました。

私はその後、間違って、再び、http://localhost:8000/public/public/#/loginへのリダイレクトが生じ

browserHistory.push('public/#/login'); 

を試してみました。

Loginコンポーネントに正しくルーティングするにはどうすればよいですか?

+0

が聞こえますすべてのリクエストを - > index.html(あなたの反応アプリでした)にルーティングすると、反応ルータはすべてのルーティングを処理できます。 – deowk

+0

@deowk pythonサーバーはindex.htmlが存在するフォルダを指していますが、ルーティングはまだ機能していません。 – JavascriptLoser

+0

例えば、私がexpressを使っていた場合、すべてのリクエストをindex.htmlにルーティングしていますか?> '' 'app.get( '*'、function(req、res){ res.sendFile( path.resolve(__ dirname、 './index.html')); }); '' ' – deowk

答えて

0

スプラッシュルートの子ルートとしてログインルートを実装してみると、間違ったレベルになるという問題を緩和することができます。あなたのhandleClick機能で

<Router history={hashHistory}> 
    <Route path='/' component={Splash}> 
    <Route path='/login' component={Login}/> 
    </Route> 
</Router> 
+0

これはうまくいかなかった – JavascriptLoser

0

ちょうどこれを試してみてください。これは "反応するルータ" である

this.props.router.replace('login') 

: "^ 3.0.2" を、あなたはあなたのpythonサーバーを設定する必要がありますように

関連する問題