React Router v4 履歴操作ガイド
React Router v4 での履歴取得について (Japanese)
React Router v4 では、アプリケーション内のルーティングを管理するための様々な機能を提供しています。その中で、履歴 (history) を取得する方法について解説します。
withRouter HOC を使う
最も一般的な方法は、withRouter
高階コンポーネント (HOC) を使って、コンポーネントに history
オブジェクトを注入することです。
import { withRouter } from 'react-router-dom';
function MyComponent(props) {
const { history } = props;
// 履歴の操作
history.push('/new-path'); // 新しいパスに移動
history.goBack(); // 前のページに戻る
history.go(-2); // 2 ページ前のページに戻る
history.replace('/replace-path'); // 現在のページを置き換える
return (
<div>
{/* 履歴を使ってレンダリング */}
</div>
);
}
export default withRouter(MyComponent);
useHistory Hook を使う
React Hooks を利用している場合は、useHistory
Hook を使って history
オブジェクトを取得できます。
import { useHistory } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
// 履歴の操作
history.push('/new-path');
history.goBack();
// ...
return (
<div>
{/* 履歴を使ってレンダリング */}
</div>
);
}
BrowserRouter プロバイダから直接アクセス
アプリケーションのルートレベルで BrowserRouter
を使用している場合、そのプロバイダから直接 history
オブジェクトにアクセスできます。
import { BrowserRouter, Route, Switch } from 'react-router-dom';
function App() {
const history = useHistory(); // または history.listen()
return (
<BrowserRouter>
<Switch>
<Route path="/" component={MyComponent} />
{/* ... */}
</Switch>
</BrowserRouter>
);
}
履歴のリスナーを追加する
history.listen
メソッドを使って、履歴が変更されたときにコールバック関数を実行することができます。
history.listen((location) => {
console.log('Location changed:', location);
});
import { withRouter } from 'react-router-dom';
function MyComponent(props) {
const { history } = props;
// 履歴の操作
history.push('/new-path'); // 新しいパスに移動
history.goBack(); // 前のページに戻る
history.go(-2); // 2 ページ前のページに戻る
history.replace('/replace-path'); // 現在のページを置き換える
return (
<div>
{/* 履歴を使ってレンダリング */}
</div>
);
}
export default withRouter(MyComponent);
history
オブジェクトのメソッドを使って、履歴を操作します。withRouter
HOC を使って、コンポーネントにhistory
オブジェクトを注入します。
import { useHistory } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
// 履歴の操作
history.push('/new-path');
history.goBack();
// ...
return (
<div>
{/* 履歴を使ってレンダリング */}
</div>
);
}
- 履歴の操作は、
withRouter
HOC を使った場合と同じです。 useHistory
Hook を使って、history
オブジェクトを取得します。
import { BrowserRouter, Route, Switch } from 'react-router-dom';
function App() {
const history = useHistory(); // または history.listen()
return (
<BrowserRouter>
<Switch>
<Route path="/" component={MyComponent} />
{/* ... */}
</Switch>
</BrowserRouter>
);
}
BrowserRouter
プロバイダから直接history
オブジェクトにアクセスします。
history.listen((location) => {
console.log('Location changed:', location);
});
import { withRouter } from 'react-router-dom';
function MyComponent(props) {
const { history } = props;
// 履歴の操作
history.push('/new-path'); // 新しいパスに移動
history.goBack(); // 前のページに戻る
history.go(-2); // 2 ページ前のページに戻る
history.replace('/replace-path'); // 現在のページを置き換える
return (
<div>
{/* 履歴を使ってレンダリング */}
</div>
);
}
export default withRouter(MyComponent);
import { useHistory } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
// 履歴の操作
history.push('/new-path');
history.goBack();
// ...
return (
<div>
{/* 履歴を使ってレンダリング */}
</div>
);
}
import { BrowserRouter, Route, Switch } from 'react-router-dom';
function App() {
const history = useHistory(); // または history.listen()
return (
<BrowserRouter>
<Switch>
<Route path="/" component={MyComponent} />
{/* ... */}
</Switch>
</BrowserRouter>
);
}
history.listen((location) => {
console.log('Location changed:', location);
});
reactjs react-router