React Router v5 での Redirect の使い方 (日本語)
React Router v5 では、Redirect
コンポーネントを使用して、ユーザーを別の URL にリダイレクトすることができます。これは、特定の条件下で特定のルートにアクセスできない場合や、ユーザーを特定のページに導く必要がある場合に便利です。
基本的な使い方
import { Redirect } from 'react-router-dom';
function MyComponent() {
return (
<div>
{/* 条件が満たされた場合、別の URL にリダイレクト */}
{condition ? <Redirect to="/new-path" /> : <div>Content</div>}
</div>
);
}
この例では、condition
が true の場合、ユーザーは /new-path
にリダイレクトされます。そうでない場合は、通常のコンポーネントのレンダリングが続きます。
具体的な使用例
- 特定のルートへのリダイレクト
import { Redirect } from 'react-router-dom'; function MyComponent() { const pathname = window.location.pathname; if (pathname === '/old-path') { return <Redirect to="/new-path" />; } return ( <div> {/* コンテンツ */} </div> ); }
- ログインが必要なページへのリダイレクト
import { Redirect } from 'react-router-dom'; function ProtectedPage() { const isLoggedIn = /* ログイン状態をチェックするロジック */; if (!isLoggedIn) { return <Redirect to="/login" />; } return ( <div> {/* 保護されたコンテンツ */} </div> ); }
重要なポイント
Redirect
は通常、条件文の中で使用され、特定の条件が満たされた場合にのみリダイレクトが行われます。- リダイレクトはブラウザの履歴に記録されます。
to
プロパティを使用して、リダイレクト先の URL を指定します。Redirect
はコンポーネントであり、レンダリングされる他のコンポーネントのように扱われます。
import { Redirect } from 'react-router-dom';
function MyComponent() {
return (
<div>
{/* 条件が満たされた場合、別の URL にリダイレクト */}
{condition ? <Redirect to="/new-path" /> : <div>Content</div>}
</div>
);
}
ログインが必要なページへのリダイレクト:
import { Redirect } from 'react-router-dom';
function ProtectedPage() {
const isLoggedIn = /* ログイン状態をチェックするロジック */;
if (!isLoggedIn) {
return <Redirect to="/login" />;
}
return (
<div>
{/* 保護されたコンテンツ */}
</div>
);
}
特定のルートへのリダイレクト:
import { Redirect } from 'react-router-dom';
function MyComponent() {
const pathname = window.location.pathname;
if (pathname === '/old-path') {
return <Redirect to="/new-path" />;
}
return (
<div>
{/* コンテンツ */}
</div>
);
}
useNavigate Hook を使用したプログラム的なリダイレクト
import { useNavigate } from 'react-router-dom';
function MyComponent() {
const navigate = useNavigate();
const handleButtonClick = () => {
navigat e('/new-path');
};
return (
<div>
<button onClick={handleButtonClick}>Navigate</button>
</div>
);
}
この方法では、useNavigate
Hook を使用してプログラム的にリダイレクトを実行します。ボタンクリックなどのイベントが発生したときに、navigate
関数を呼び出すことで、指定した URL にリダイレクトされます。
history オブジェクトを使用する
import { useHistory } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
const handleButtonClick = () => {
history.push('/new- path');
};
return (
<div>
<button onClick={handleButtonClick}>Navigate</button>
</div>
);
}
この方法では、history
オブジェクトを使用してリダイレクトを実行します。history.push
メソッドを呼び出すことで、指定した URL にプッシュします。
Link コンポーネントの to プロパティを動的に設定する
import { Link } from 'react-router-dom';
function MyComponent() {
const [path, setPath] = useState('/new-path');
const handleButtonClick = () => {
setPath('/another-path');
};
return (
<div>
<Link to={path}>Navigate</Link>
<button onClick={handleButtonClick}>Change Path</button>
</div>
);
}
この方法では、Link
コンポーネントの to
プロパティを動的に設定することで、条件に基づいて異なる URL にリンクすることができます。
Switch コンポーネントの exact プロパティを使用してルートをマッチングする
import { Switch, Route, Redirect } from 'react-router-dom';
function App() {
return (
<Switch>
<Route exact path="/old-path" render={() => <Redirect to="/new-path" />} />
<Route path="/new-path" component={MyComponent} />
</Switch>
);
}
この方法では、Switch
コンポーネントの exact
プロパティを使用して、特定のルートに厳密にマッチングし、そのルートにアクセスされた場合にリダイレクトを実行します。
javascript reactjs react-router