この件に関する多くのドキュメントとSOFに関する質問を読んでいますが、私はこれを行うために多くの方法を使用しましたが、私は何か重要なことを逃していると思います。私が使ったすべてのナビゲーション方法について、詳細で関連性の高いコードを提供するのは難しいです。私はそれを試してみましょう。反応ルータを使用してプログラムでリダイレクトできない4
ここではいくつかのイントロダクションについて説明します。私は反応を還元するアプリを持っていた、私はサーバーから状態を取得し、この状態に応じてページにリダイレクトする必要があります。
私のAppクラスの簡易版方法レンダリング:index.jsファイル内BrowserRouterでラップ
render() {
console.log("App.render");
console.log(this.state);
return (
<div id='game-container' width="1126" height="634">
<Router>
<div>
<Route exact path="/" component={Page1}/>
<Route path="/bets" component={Page2}/>
<Route path="/games" component={Page3}/>
<Route path="/newpage" component={Page4}/>
<Route path="/info" component={ Info }/>
</div>
</Router>
<Overlay/>
</div>
);
}
}
アプリケーションコンポーネント
ReactDOM.render(
<Provider store={myStore}>
<BrowserRouter>
<App assets={ assets } locale={ qs['locale']} token={ qs['token']} sounds={ sounds } />
</BrowserRouter>
</Provider>
, document.querySelector('.game-wrapper'));
を方法1
withRouterそれは実現のだについてこのコードを追加しました: 01私はセッション情報を取得していたときに
とは、私が試してみてください。ブラウザで
this.props.history.push("/newpage");
URLが変更されているが、視覚的なページがしません。コンテキストルータと
方法2は、このために
はちょうど
App.contextTypes = {
router: React.PropTypes.object
};
を追加し、私はセッション情報を取得していたとき、私は試してみてください最初と同じように
this.context.router.history.push("/newpage");
同じ結果をメソッド(URLは変更されますが、ページはありません)。 (ここではProgrammatically navigate using react router V4た)
方法3リダイレクト
だから私のrenderメソッドは次のようになります。
render() {
console.log("App.render");
console.log(this.state);
return (
<div id='game-container' width="1126" height="634">
<Router>
<div>
<Redirect to={{ pathname: this.state.redirectTo }}/>
<Route exact path="/" component={Page1}/>
<Route path="/bets" component={Page2}/>
<Route path="/games" component={Page3}/>
<Route path="/newpage" component={Page4}/>
<Route path="/info" component={ Info }/>
</div>
</Router>
<Overlay/>
</div>
);
}
}
そして、私はページを変更したいとき、私は新しい状態を設定します。
this.setState({ redirectTo: "/newpage" });
この方法では、奇妙な結果が得られます。コンストラクタで初期状態を設定すると、どのページにもリダイレクトされます。しかし、このメソッドをコード内のどこにでも使用すると、新しい状態で呼び出されるレンダリングメソッドがデバッグで参照されますが、リダイレクトは起こりません!
状態を設定しようとすると、コンポーネントはすでにマウントされています。状態を変更する代わりに 'history.push'を使わないのはなぜですか? –
私の1と2の方法についてお読みですか? –
ページパスから始めましょう。 '/ newpage'パスで何かを開こうとしていますが、どこにも指定していません。どこで扱っていますか? –