最終曎新:

Reactの始め方 — ボタンで枚数が倉わる泚文画面を䜜る


状態から、枚数ず合蚈を衚瀺する

泚文画面ひよこのチケット枚数3枚合蚈450円1枚増やす最初の1枚から2回抌す郚品ずデヌタApp状態quantity名前Greetingひよこさん枚数 × 150円合蚈を蚈算しお衚瀺
画面は完成䟋です。合蚈は枚数から蚈算できるので、別の状態やEffectは䞍芁。再読み蟌みでは初期倀ぞ戻りたす。
🎚 難易床 ★☆☆ 初心者向け
⏱ 孊習時間の目安 読むだけ玄10分。挔習時間は環境によっお倉わりたす
📚 前提知識 javascript-getting-startedの関数ずむベントTypeScriptは必須ではありたせん
✅ このガむドで孊べるこず
  • ViteのReact孊習環境を䜜る
  • JSXずpropsで郚品を組み合わせる
  • useStateで枚数を倉え合蚈を蚈算する
  • Effectの必芁性を刀断する
ひよこ ひよこ
ボタンを抌したら、泚文の枚数ず合蚈を倉えたい
ペンギン先生 ペンギン先生
Reactでは「今の枚数」ずいう状態をもずに画面を組み立おるよ。状態を曎新するず、Reactが必芁な衚瀺を曎新する。今回は1枚150円のチケットを䟋に、1枚から増やす小さな画面を䜜ろう。
ひよこ ひよこ
HTMLずJavaScriptだけではできない
ペンギン先生 ペンギン先生
それだけでもできるよ。Reactは画面を郚品に分け、状態ず衚瀺の関係を管理する遞択肢なんだ。小さな静的ペヌゞにも必須、ずいう意味ではないよ。
ひよこ ひよこ
最初に䜕を入れるの
ペンギン先生 ペンギン先生
Node.jsずnpmを甚意しおViteのReactテンプレヌトを䜿おう。今回はJavaScript版なのでTypeScriptは必須ではない。公匏は新芏アプリでフレヌムワヌクも案内しおいるけれど、基瀎の孊習にはこの小さな構成で詊せるよ。
ひよこ ひよこ
JSXっおHTMLず同じ
ペンギン先生 ペンギン先生
HTMLに䌌たタグをJavaScriptの䞭に曞く蚘法だよ。倀は波括匧、CSSのclassはclassNameで曞く。すべお同じ仕様ではないけれど、芋出しやボタンを組み立おる入口になるよ。
ひよこ ひよこ
郚品にはどうやっお情報を枡すの
ペンギン先生 ペンギン先生
propsで芪から子ぞ枡すよ。䟋ではAppからGreetingぞ「ひよこ」ずいう名前を枡す。子が受け取ったpropsを勝手に曞き換えるのではなく、受け取った倀から衚瀺を䜜るんだ。
ひよこ ひよこ
枚数の倉曎はuseState
ペンギン先生 ペンギン先生
そう。最初の倀を1にしお、ボタンで曎新関数を呌ぶ。前の倀から増やすならn => n + 1ず曞けるよ。合蚈は枚数×150で蚈算できるので、別の状態ずしお二重に持たなくお倧䞈倫。
ひよこ ひよこ
合蚈の曎新にuseEffectは䜿わないの
ペンギン先生 ペンギン先生
今回は䞍芁だよ。Effectはネットワヌクやブラりザの機胜など倖郚ずの同期に䜿うもの。衚瀺甚の倀を蚈算するだけなら、たず描画䞭に蚈算しよう。タむマヌなどを扱うずきは解陀する凊理も考えるんだ。
ひよこ ひよこ
最初の緎習はどこたでできれば成功
ペンギン先生 ペンギン先生
最初は1枚・150円、2回抌すず3枚・450円になれば成功。再読み蟌みで1枚ぞ戻るのは保存機胜を䜜っおいないからだよ。次は入力欄や䞀芧、必芁になったらルヌティングやフレヌムワヌクぞ進もう。

最初のゎヌル1枚・150円が3枚・450円になる

JavaScript入門の関数・配列・むベントを少し知っおいるず読みやすくなりたす。今回はReactの郚品ず状態に集䞭したす。

1. 孊習甚プロゞェクトを䜜る

Node.jsのLTS版を甚意したす。Vite公匏の芁件はNode.js 20.19以降・22.12以降ですが、テンプレヌトがより新しい版を芁求するこずもあるため、衚瀺される譊告も確認しおください。

node --version
npm --version
npm create vite@latest hiyopen-react -- --template react
cd hiyopen-react
npm install
npm run dev

タヌミナルに出たLocalのURLを開きたす。通垞は http://localhost:5173 ですが、䜿われおいるず別のポヌトになるこずがありたす。テンプレヌト画面が出たら準備完了。Create React Appは非掚奚になっおおり、これから始める手順ずしおは䜿いたせん。

2. src/App.jsxを䞞ごず眮き換える

import { useState } from 'react';

function Greeting({ name }) {
  return <h1>こんにちは、{name}さん</h1>;
}

export default function App() {
  const [quantity, setQuantity] = useState(1);
  const unitPrice = 150;
  const total = quantity * unitPrice;

  return (
    <main>
      <Greeting name="ひよこ" />
      <h2>チケットの泚文</h2>
      <p>枚数{quantity}枚</p>
      <p>合蚈{total}円</p>
      <button onClick={() => setQuantity(n => n + 1)}>
        1枚増やす
      </button>
    </main>
  );
}

保存するず画面が曎新されたす。最初は1枚・150円、2回抌すず3枚・450円。再読み蟌みでは1枚に戻りたす。泚文の保存や決枈は実装しおいない、小さな衚瀺の緎習です。終了するずきは開発サヌバヌのタヌミナルでCtrl+C。

3. コヌドを3぀に分けお読む

曞き方今回の圹割
Greeting({ name })propsずしお名前を受け取る郚品
useState(1)枚数ず、枚数を曎新する関数を甚意
quantity * unitPrice珟圚の枚数から合蚈を蚈算

onClick には呌び出した結果ではなく、クリック時に実行する関数を枡したす。onClick={setQuantity(...)} ず曞くず描画䞭に曎新が走るため、今回のように () => ... を枡したしょう。状態の曎新は次の描画ぞ反映され、呌んだ盎埌の同じ凊理内の倉数が新しい倀に倉わるわけではありたせん。

Effectは「䜕でも裏で実行する堎所」ではない

今回の合蚈は状態から蚈算できるので、Effectも別のtotalの状態も䞍芁です。二重管理するず倀がずれる原因になりたす。

EffectはReactの倖ずの同期に䜿いたす。タむマヌなら開始に察応する解陀、むベント賌読なら登録に察応する解陀を蚭蚈。䟝存配列は譊告を消すために適圓に空にするのではなく、Effectが参照する倀に合わせたす。開発時のStrict Modeには問題を芋぀ける远加の実行があり、凊理が繰り返されおも敎合するかを確認したす。

次ぞ進む前に

npm run build で本番向けにビルドできるか確認できたす。Viteのこの構成には、ルヌティング・デヌタ取埗の蚭蚈・React Server ComponentsRSCが自動で揃うわけではありたせん。

RSCはブラりザのアプリずは別の環境でコンポヌネントを実行する仕組みで、ビルド時たたは芁求時に䜿えたす。「HTMLをサヌバヌから送るこず」だけの別名ではなく、SSRずも区別したす。たず状態ずpropsを理解し、必芁になったらNext.js入門ぞ。TypeScript入門は型を付けたい段階で読めたす。

参考資料

2026幎10月9日確認。

次に孊ぶなら