react/react-router/fluxアプリケーションにFacebookログインを作成したかった。ログインイベントにリスナーを登録しました。ユーザーがログインしている場合、ユーザーを'/dashboard'
にリダイレクトしたいのですが、どうすればよいですか? location.Push
は、ページを完全にリロードした後を除き、あまりうまく機能しませんでした。
React Router v0.13
Router
インスタンス Router.create
から返される を渡すことができます(または、Reactコンポーネント内にある場合は、 コンテキストオブジェクト )、およびメソッド transitionTo
など を含み、新しいルートへの移行に使用できます。
React Router v3
これが私がすることです
var Router = require('react-router');
Router.browserHistory.Push('/somepath');
React Router v4
これで、React Router v4で<Redirect>
componentを使用できます。
<Redirect>
をレンダリングすると、新しい場所に移動します。新しい場所は、サーバー側のリダイレクトのように、履歴スタックの現在の場所を上書きします。
import React, { Component } from 'react';
import { Redirect } from 'react-router';
export default class LoginComponent extends Component {
render(){
if(this.state.isLoggedIn === true){
return (<Redirect to="/your/redirect/page" />);
}else{
return (<div>Login Please</div>);
}
}
}
ドキュメント https://reacttraining.com/react-router/web/api/Redirect
React Router v2
質問はすでに回答されていますが、ここで提供されているソリューションのいずれにも含まれていないため、私にとって有効なソリューションを投稿することが重要だと思います。
最初に、LoginForm
コンポーネントでルーターコンテキストを使用しています
LoginForm.contextTypes = {
router: React.PropTypes.object
};
その後、router
コンポーネント内のLoginForm
オブジェクトにアクセスできます。
handleLogin() {
this.context.router.Push('/anotherroute');
}
PS:React-routerバージョン2.6.0での作業
React Router v3
このようなルーターでアプリを作成します
// Your main file that renders a <Router>:
import { Router, browserHistory } from 'react-router'
import routes from './app/routes'
render(
<Router history={browserHistory} routes={routes} />,
mountNode
)
ReduxミドルウェアまたはFluxアクションのような場所:
import { browserHistory } from 'react-router'
// Go to /some/path.
browserHistory.Push('/some/path')
// Go back to previous location.
browserHistory.goBack()
React Router v4.2.0
私はReact-16.2.0&React-router-4.2.0
そして、私はこのコードthis.props.history.Push("/");
で解決策を得ます
私の作業コード:
.then(response => response.json())
.then(data => {
if(data.status == 200){
this.props.history.Push("/");
console.log('Successfully Login');
}
})
私はこのドキュメントをフォローしていました redirect-on-login-and-logout
私もreturn <Redirect to='/' />
を試してみましたが、不運なことに、これはうまくいきませんでした。
React Router v3
コンポーネント内の移動
コンポーネント内部にリダイレクトする必要がある場合は、withRouter
デコレーターを使用する必要があります。デコレータはあなたの代わりにコンテキストを使用します。
import {withRouter} from 'react-router'
fucntion Foo(props) {
props.router.Push('/users/16');
}
export default withRouter(Foo);
withRouter(コンポーネント、[オプション])
ルータの小道具で小道具を強化するために別のコンポーネントをラップするHoC(高次コンポーネント)。
withRouterProps = {... componentProps、router、params、location、routes}
コンポーネントを渡すと、ラップされたコンポーネントが返されます。
ルーターコンポーネントをラッパーコンポーネントの支柱として明示的に指定して、コンテキストからルーターオブジェクトをオーバーライドできます。