コンポーネントを作ってみよう
このページで学ぶこと
- Reactコンポーネントとは何かがわかる
- 自分でコンポーネントを作れる
- JSXの基本的な書き方がわかる
コンポーネントとは
コンポーネントは UIの部品 です。
React では「ページ全体」を、小さな部品(コンポーネント)を組み合わせて作ります。
ページ
├── <Header />
│ ├── <Logo />
│ └── <Nav />
├── <Main />
│ ├── <Card />
│ ├── <Card />
│ └── <Card />
└── <Footer />それぞれのコンポーネントは独立したJavaScriptの関数として定義します。
やってみよう
ステップ1: 最初のコンポーネントを作る
app/page.js を開いて、以下のように書き換えてみましょう。
// app/page.js
// ① コンポーネントの定義(関数)
function Hello() {
return <p>こんにちは!</p>
}
// ② ページ本体(コンポーネントを使う)
export default function Home() {
return (
<main>
<h1>とんペディアへようこそ</h1>
<Hello /> {/* ③ コンポーネントを呼び出す */}
<Hello /> {/* 何度でも使える */}
</main>
)
}ブラウザで確認すると「こんにちは!」が2回表示されるはずです。
ポイント
- コンポーネント名は必ず大文字で始める(
Hello、MyCardなど) returnの中にJSXを書く<Hello />と書くと、そこにコンポーネントが展開される
ステップ2: コンポーネントをファイルに分ける
実際の開発ではコンポーネントを別ファイルに分けます。
components/ フォルダを作り、Card.js というファイルを作成しましょう。
// components/Card.js
export default function Card() {
return (
<div style={{ border: '1px solid #ccc', padding: '16px', borderRadius: '8px' }}>
<h2>カードタイトル</h2>
<p>カードの内容です。</p>
</div>
)
}次に app/page.js から Card コンポーネントを使います。
// app/page.js
import Card from '../components/Card' // ← importで読み込む
export default function Home() {
return (
<main>
<h1>とんペディアへようこそ</h1>
<Card />
<Card />
</main>
)
}ステップ3: JSXの書き方を押さえる
JSXはHTMLに似ていますが、いくつか違いがあります。
function MyComponent() {
const name = '太郎'
const isLoggedIn = true
return (
<div>
{/* コメントはこう書く */}
{/* ① 変数は {} で埋め込む */}
<p>こんにちは、{name}さん</p>
{/* ② class ではなく className を使う */}
<p className="text-red">赤いテキスト</p>
{/* ③ 条件によって表示を切り替える */}
{isLoggedIn && <p>ログイン中です</p>}
{/* ④ 複数の要素を返すときは1つの要素で囲む */}
</div>
)
}
classではなくclassName
HTMLではclass="..."と書きますが、JSXではclassName="..."と書きます。
classはJavaScriptの予約語なので、JSXでは別名が使われています。
ステップ4: リストを表示する
配列のデータをリスト表示する方法を覚えましょう。
map() を使うのが基本パターンです。
function FruitList() {
const fruits = ['りんご', 'バナナ', 'みかん']
return (
<ul>
{fruits.map((fruit, index) => (
// ⚠️ key は必ず指定する(Reactの内部処理で必要)
<li key={index}>{fruit}</li>
))}
</ul>
)
}
keyって何?
Reactはリストの要素を効率よく更新するために、各要素を識別するkeyが必要です。
keyはリスト内で一意(ユニーク)な値を使いましょう。
実際のアプリではDBのIDを使うことが多いです。
確認しよう
- 自分でコンポーネントを定義して呼び出せた
- コンポーネントをファイルに分けて
importできた - JSXの中で変数を
{}で表示できた -
map()でリストを表示できた
AIに聞いてみよう
「Reactのコンポーネントを作るとき、関数コンポーネントとクラスコンポーネントの違いは何ですか?」
次のステップ
Last updated on