[解決済み] React Router v4で履歴にプッシュする方法は?
2022-03-20 16:22:59
質問
React Routerの現在のバージョン(v3)では、サーバーの応答を受け取って、その応答に対して
browserHistory.push
を使用して、適切なレスポンスページに移動します。しかし、これはv4では利用できませんし、これを処理する適切な方法が何なのかわかりません。
この例では、Reduxを使って。
components/app-product-form.js
コール
this.props.addProduct(props)
ユーザがフォームを送信したとき。サーバーが成功を返した場合、ユーザーはCartページに移動します。
// actions/index.js
export function addProduct(props) {
return dispatch =>
axios.post(`${ROOT_URL}/cart`, props, config)
.then(response => {
dispatch({ type: types.AUTH_USER });
localStorage.setItem('token', response.data.token);
browserHistory.push('/cart'); // no longer in React Router V4
});
}
React Router v4の機能からCartページへのリダイレクトを行うにはどうすればよいですか?
解決方法は?
を使用することができます。
history
メソッドをコンポーネントの外部で使用することができます。以下の方法で試してみてください。
まず
history
オブジェクトを使用します。
履歴パッケージ
:
// src/history.js
import { createBrowserHistory } from 'history';
export default createBrowserHistory();
そして、それを
<Router>
(
ご注意
を使用する必要があります。
import { Router }
の代わりに
import { BrowserRouter as Router }
):
// src/index.jsx
// ...
import { Router, Route, Link } from 'react-router-dom';
import history from './history';
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<div>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/login">Login</Link></li>
</ul>
<Route exact path="/" component={HomePage} />
<Route path="/login" component={LoginPage} />
</div>
</Router>
</Provider>,
document.getElementById('root'),
);
任意の場所から現在地を変更する、など。
// src/actions/userActionCreators.js
// ...
import history from '../history';
export function login(credentials) {
return function (dispatch) {
return loginRemotely(credentials)
.then((response) => {
// ...
history.push('/');
});
};
}
アップデイト : には、少し違った例も見ることができます。 React Router FAQ .
関連
-
[解決済み] ReactjsのEsLintの "react / jsx-props-no-spreading "エラーを無効化する。
-
[解決済み] create-react-appビルドスクリプトを実行する際に、ビルド.env変数を設定するには?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] クエリ文字列からパラメータ値を取得する方法は?
-
[解決済み] React Router v4 - 現在のルートを取得する方法は?
-
[解決済み】オプションのパスパラメータを持つReact Router
-
[解決済み】react router V4でプログラムによる移動ができるようになりました。
-
[解決済み】react router v4 / v5でネストされたルート
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】<Router>の外側で<Link>を使用してはならない
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み】Warning.Itが表示されるのはなぜですか?Functions are not valid as a React child?
-
[解決済み] reactでonloadを使うには?
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] ReactコンポーネントのJest SnapshotテストにおけるSnapshotテストの仕組みとtoMatchSnapshot()関数は何をするのか?
-
[解決済み] React JSXのforEach()でHTMLが出力されない
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み】react router V4でプログラムによる移動ができるようになりました。
-
[解決済み] React Routerでページをリダイレクトする方法とは?[クローズド]