0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React学習ログ #2|コンポーネントの作成とネスト

Last updated at Posted at 2025-12-30

前回: React学習ログ #1|開発環境構築編

コンポーネントの作成とネスト

チュートリアルリンク

コンポーネントとは

画面の部品をJavaScriptの関数として定義したものです。

画面上では見出しやボタンなど色々な部品の集合体で構成されていて、Reactではその部品をコンポーネントとして定義します。

function MyButton() {
  return (
    <button>I'm a button</button>
  );
}

上記がやっていることとしては、この関数を呼ぶと、ボタンの見た目(HTML)が返ってくるというイメージです。

コンポーネントに分けるのは、「再利用できるUIの設計図」としての意味があります。

なので、同じHTMLを複数書くのではなく、コンポーネントとして定義して呼び出し再利用するようにします。

自分はRailsのpartial(_hoge.html.erb)のような感じで理解しました。

変数だとa = 1のように、値を格納して必要に応じて変数を呼び出すと思いますが、値じゃなく「見た目や振る舞い」を入れる変数のような感じかなと思います。

ネストとは

例えばHTMLで以下のようなコードがあるとします。

<div>
  <h1>Welcome to my app</h1>
  <button>I'm a button</button>
</div>

これは

  • h1 が div の中
  • button が div の中

に入っている状態です。

この状態をネストされていると言います。

上記のコードをReactのコンポーネントを利用して書いたものが以下となります。

export default function MyApp() {
  return (
    <div>
      <h1>Welcome to my app</h1>
      <MyButton />
    </div>
  );
}

結論、ネストとは「コンポーネント(またはHTMLタグ)を別のコンポーネントの中に入れること」と言えます。

コーディング

実際に画面上に表示させてみます。

環境は#1のものを使用しています。

src/App.jsx
// ボタンを格納するコンポーネント
function MyButton() {
  return (
    <button>
      I'm a button
    </button>
  );
}

// export default がつくと「このファイルの中で、一番使われるやつ」という意味になる
export default function MyApp() {
  return (
    <div>
      <h1>Welcome to my app</h1>
      <MyButton />
    </div>
  );
}

ソースコードを変更して画面を確認してみます。

スクリーンショット 2025-12-30 14.49.37.png

意図した通りに画面上にて表示されました👏

JSXとは

先ほどのファイルの拡張子は.jsではなく、.jsxでした。

初めて触れる拡張子なので、少し調べてみました。

項目 意味
JSX HTMLっぽくUIを書けるJavaScriptの記法
使う場所 Reactのコンポーネントの return の中
正体 最終的には React.createElement() に変換される
目的 UIを直感的に書くため

JSXを使用すると

<h1>Hello React</h1>

と書けるところ、JSだと

React.createElement(
  "h1",
  null,
  "Hello React"
)

となって、読みにくいし書くのが面倒だなってなります。

<h1>Hello React</h1>

そして、見た目はHTMLなのですが、実はJavaScriptのコードです。

例えば、下記のコードだと<h1>Hello React</h1>の部分がJSXとなります。

export default function MyApp() {
  return <h1>Hello React</h1>
}

少し書き換えてみると

function MyApp() {
  return ここにJSXを書く
}

このようなイメージになります。

今回はViteを使用しているのですが、裏で

<h1>Hello</h1>

⬇️

React.createElement("h1", null, "Hello")

と変換してくれています。

スタイルの追加

チュートリアルリンク

src/App.cssというファイルを作成して、その中にstyleを設定します。
*今回は既にありました。

src/App.css
/* 画面全体の設定 */
body {
  background-color: white;
  font-family: Arial, sans-serif;
  margin: 0;
  padding: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

/* h1タグの色を青に設定 */
h1 {
  color: blue;
}

/* ボタンのデザインを設定 */
button {
  background-color: orange;
  color: white;
  padding: 8px 16px;
  border-radius: 6px;
  border: none;
}

次にsrc/App.jsの最上部に

src/App.jsx
import "./App.css";

を追加します。

最後に画面を確認してみます。

スクリーンショット 2025-12-30 15.10.00.png

設定した通りのデザインとなっています👏

次回

データを扱っていきます。
React学習ログ #3|データの表示・条件判定・リストのレンダー

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?