head要素の操作の基本

React.jsでhead要素の中を変更する際は、react-helmetというライブラリを使います。遷移したページ別にhead要素の中身を動的に変更できます。

今回作るプログラムの例

こちらの例で、ページ遷移のやり方を見ていきます。

  • ページは、//page2//page/3/の3つ
  • /には、/page/2/に遷移するボタンがある
  • /page/2/には、/page/3/に遷移するボタンがある
  • /page/3/には、/に遷移するボタンがある

head要素を操作する準備

react-helmetをインストールする

ターミナルから下記のコマンドを実行します。

npm install react-helmet

ページ別にhead要素の中身を変更する例

では、ページ遷移のあるプロジェクトでreact-helmetの使い方を掴んでもらいます。解説が複雑にならないように、今回は複数のページのコンテンツを/src/index.jsの中にまとめて記述しています。

ファイルに書くプログラム

/src/index.js
import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Routes, Route, useNavigate } from "react-router-dom";
import Helmet from "react-helmet";

const App = () => {
	return (
		<BrowserRouter>
			<Routes>
				<Route path="/" element={<Page1/>}/>
				<Route path="/page2/" element={<Page2/>}/>
				<Route path="/page3/" element={<Page3/>}/>
			</Routes>
		</BrowserRouter>
	);
}

// 1ページ目の内容
const Page1 = () => {
	const navigate = useNavigate();
	return (
		<>
			<Helmet>
				<title>ページ1</title>
			</Helmet>
			<div>
				<p>ページ1</p>
				<button onClick={() => navigate('/page2')}>ページ2に進む</button>
			</div>
		</>
	);
}

// 2ページ目の内容
const Page2 = () => {
	const navigate = useNavigate();
	return (
		<>
			<Helmet>
				<title>ページ2</title>
				<meta name="robots" content="noindex,nofollow" />
			</Helmet>
			<div>
				<p>ページ2</p>
				<button onClick={() => navigate('/page3')}>ページ3に進む</button>
			</div>
		</>
	);
}

// 3ページ目の内容
const Page3 = () => {
	const navigate = useNavigate();
	return (
		<>
			<Helmet>
				<title>ページ3</title>
			</Helmet>
			<div>
				<p>ページ3</p>
				<button onClick={() => navigate('/')}>ページ1に戻る</button>
			</div>
		</>
	);
}

ReactDOM.render(
	<App />,
	document.getElementById('root')
);