React Router Link を HTML ボタンでラップする
React Router Link と HTML ボタン を組み合わせることで、ユーザーがクリックすると特定のルートにナビゲートするボタンを作成することができます。
基本的な構造
import { Link } from 'react-router-dom';
function MyButton() {
return (
<button>
<Link to="/about">About</Link>
</button>
);
}
- HTML ボタン
Link
コンポーネントを HTML の<button>
要素でラップすることで、ボタンとして表示し、クリックイベントをトリガーします。 - to プロパティ
Link
コンポーネントのto
プロパティに、ナビゲートしたいルートのパスを指定します。 - Link コンポーネント
React Router が提供するコンポーネントで、特定のルートにナビゲートするためのリンクを作成します。
詳細な解説
- インポート
react-router-dom
からLink
コンポーネントをインポートします。 - ボタンの作成
<button>
要素を作成します。 - リンクの埋め込み
<Link>
コンポーネントを<button>
要素の中に埋め込みます。 - ルートの指定
Link
コンポーネントのto
プロパティに、ナビゲートしたいルートのパス(/about
の場合)を指定します。
動作
- ボタンの外観は、通常の HTML ボタンと同じようにスタイル設定することができます。
- ユーザーがボタンをクリックすると、
Link
コンポーネントのto
プロパティで指定されたルート(/about
)にナビゲートされます。
注意
Link
コンポーネントは、ブラウザの履歴を管理し、ページの再読み込みを行わずにルートを切り替えることができます。Link
コンポーネントは、デフォルトでは<a>
要素としてレンダリングされます。これを<button>
要素でラップすることで、ボタンとしての外観と動作を実現します。
コード例
import { Link } from 'react-router-dom';
function MyButton() {
return (
<button>
<Link to="/about">About</Link>
</button>
);
}
コード解説
注意事項
CSS でスタイルを適用
Link
コンポーネントに直接 CSS クラスを適用して、ボタンのスタイルをカスタマイズします。
import { Link } from 'react-router-dom';
function MyButton() {
return (
<Link to="/about" className="my-button">
About
</Link>
);
}
スタイルコンポーネントを使用
- Styled Components や Emotion などのスタイルコンポーネントライブラリを使用して、
Link
コンポーネントのスタイルを定義します。
import styled from 'styled-components';
import { Link } from 'react-router-dom';
const MyButton = styled(Link)`
// ボタンのスタイルを定義
`;
function MyButtonComponent() {
return (
<MyButton to="/about">
About
</MyButton>
);
}
カスタムフックを使用
- カスタムフックを作成して、
Link
コンポーネントのスタイルやクリックイベントの処理をカプセル化します。
import { Link } from 'react-router-dom';
import { useCallback } from 'react';
function useMyButton() {
const handleClick = useCallback(() => {
// クリックイベントの処理
}, []);
return { handleClick };
}
function MyButton() {
const { handleClick } = useMyButton();
return (
<button onClick={handleClick}>
<Link to="/about">About</Link>
</button>
);
}
サードパーティライブラリを使用
- React Router のエコシステムには、ボタンのスタイルや機能を拡張するためのサードパーティライブラリが存在します。これらのライブラリを使用することで、より複雑なボタンを作成することができます。
html reactjs button