Next.jsによるWebアプリケーション開発概論

次章への接続:状態管理と入力処理へ進む

9画面設計基礎:レイアウトを組み、スタイルで整える
Next.jsTailwind CSSアプリ開発開発Web開発

この節でやること

この節は、第4章のまとめです。

ここまでで、Next.js と Tailwind CSS を使って、画面の見た目を作ってきました。

第4章でやったことは、主にこれです。

学んだことできるようになったこと
Flexbox要素を縦・横に並べる
Gridカード一覧を列で並べる
Tailwind CSSクラスで見た目を整える
レスポンシブ画面幅でレイアウトを変える
UI模写画面を部品に分けて再現する

次章では、ここに 動き を加えます。つまり、今までは見る画面 を作っていました。

次からは、入力できる画面押すと変わる画面 を作ります。

第4章でできるようになったこと

見た目を作れるようになった

これまでは、次のような画面を作れるようになりました。

export default function Page() {
  return (
    <main className="min-h-screen bg-gray-50 p-4">
      <section className="mx-auto max-w-xl rounded-2xl bg-white p-6">
        <h1 className="text-2xl font-bold">会員登録</h1>
        <p className="mt-2 text-sm text-gray-600">
          必要事項を入力してください。
        </p>
        <button className="mt-4 rounded-lg bg-black px-4 py-2 text-white">
          登録する
        </button>
      </section>
    </main>
  )
}

これは、見た目としてはかなり画面らしいです。

しかし、このボタンを押しても、まだ何も起きません。

入力欄を作っても、まだ入力された文字を画面側で使うことはできません。

つまり、今の段階はこうです。

今できることまだできないこと
画面を作る入力内容を保存する
ボタンを表示する押したら表示を変える
カードを並べる選択状態を切り替える
UIを模写するユーザー操作に反応する

次章では、この「まだできないこと」を学びます。

次章で学ぶこと

状態管理とは何か

次章の中心になる言葉は、状態 です。

状態とは、画面の中で変わる値のことです。

たとえば、次のようなものです。

状態の例何が変わるか
入力欄の文字ユーザーが入力すると変わる
カウント数ボタンを押すと増える
メニューの開閉開く・閉じるが変わる
選択中のカテゴリ選んだボタンによって変わる
エラーメッセージ入力内容によって表示が変わる

今までの画面は、ほとんど「固定表示」でした。

次章では、ユーザーの操作によって画面が変わる仕組みを学びます。

状態がある画面の例

カウントが増えるボタン

たとえば、次のような画面です。

Rendering diagram…

React では、このような「変わる値」を扱うときに useState を使います。

'use client'

import { useState } from 'react'

export default function Page() {
  const [count, setCount] = useState(0)

  return (
    <main className="p-4">
      <p className="text-2xl font-bold">{count}</p>
      <button
        className="mt-4 rounded-lg bg-black px-4 py-2 text-white"
        onClick={() => setCount(count + 1)}
      >
        1増やす
      </button>
    </main>
  )
}

今は全部を理解しなくて大丈夫です。

まず見る場所はここだけです。

コード意味
count今の数字
setCount数字を変える命令
useState(0)最初の数字を0にする
onClick押したときに動く

次章では、このようなコードを1つずつ分解して理解します。

入力処理とは何か

入力欄の文字を受け取る

次に学ぶのは、入力処理 です。

たとえば、名前を入力したら、その名前を画面に表示するようなものです。

Rendering diagram…

コードでは、次のような形になります。

'use client'

import { useState } from 'react'

export default function Page() {
  const [name, setName] = useState('')

  return (
    <main className="p-4">
      <input
        className="rounded-lg bg-gray-100 px-3 py-2"
        placeholder="名前を入力"
        value={name}
        onChange={(event) => setName(event.target.value)}
      />

      <p className="mt-4 text-lg">
        入力中の名前:{name}
      </p>
    </main>
  )
}

ここで大事なのは、入力欄に文字を打つと、画面の文字も変わることです。

ここまでのUIと次章の違い

第4章は見た目、次章は動き

第4章と次章の違いを表で整理します。

学ぶこと
第4章見た目を作るカード、ボタン、一覧、レイアウト
次章動きを作る入力、クリック、開閉、選択、送信

第4章では、こういうことをしていました。

<button className="rounded-lg bg-black px-4 py-2 text-white">
  登録する
</button>

これは、ボタンを見せる コードです。

次章では、こうなります。

<button
  className="rounded-lg bg-black px-4 py-2 text-white"
  onClick={() => alert('登録しました')}
>
  登録する
</button>

これは、ボタンを押したら動く コードです。

次章でよく出る言葉

表にまとめてます

次章では、新しい言葉がいくつか出ます。今は暗記しなくて大丈夫です。「こういう言葉が出るんだな」くらいで見てください。

言葉意味使う場面
useState変わる値を持つ数字、文字、開閉状態
state画面の中で変わる値入力中の文字、選択中の項目
setStatestateを変える命令ボタンを押したとき
onClickクリックしたときの処理ボタン
onChange入力が変わったときの処理input
value入力欄に表示する値フォーム
event操作の情報入力値を取り出す

状態管理が必要になる場面

固定表示だけでは足りない

次のような画面を作るとき、状態管理が必要になります。

作りたい画面必要な状態
カウントボタン今の数字
検索フォーム入力中の検索語
タブ切り替え選択中のタブ
メニュー開閉開いているか、閉じているか
エラー表示エラーがあるか
チェックボックス選択されているか

たとえば、YouTube風UIで考えるなら、次のような状態があります。

UI状態
検索欄入力中の検索キーワード
カテゴリボタン選択中のカテゴリ
サイドバー開いているか閉じているか
動画カード選択された動画

つまり、次章を学ぶと、前回作った YouTube 風 UI にも「動き」を付けられるようになります。

手を動かす予習

ボタンを押したら文字を変える

次のコードを app/page.tsx に書いてください。

'use client'

import { useState } from 'react'

export default function Page() {
  const [message, setMessage] = useState('まだ押されていません')

  return (
    <main className="min-h-screen bg-gray-50 p-4">
      <section className="mx-auto max-w-xl rounded-2xl bg-white p-6">
        <h1 className="text-2xl font-bold">状態管理の予習</h1>

        <p className="mt-4 text-sm text-gray-600">
          {message}
        </p>

        <button
          className="mt-6 rounded-lg bg-black px-4 py-2 text-white"
          onClick={() => setMessage('ボタンが押されました')}
        >
          押してみる
        </button>
      </section>
    </main>
  )
}

画面で確認してください。

最初はこう表示されます。

まだ押されていません

ボタンを押すと、こう変わります。

ボタンが押されました

これが、次章で学ぶ「状態管理」の入口です。

このコードで見る場所

重要な部分だけ見る

コード役割
'use client'ブラウザ側で動く部品にする
useState変わる値を使う
message今の表示文字
setMessage表示文字を変える
onClickボタンを押したときに動く

Next.js の App Router では、useStateonClick のようなブラウザ側の動きを使う場合、基本的に Client Component として扱います。

そのため、ファイルの先頭に 'use client' を書きます。

次章への準備チェック

次章に進む前に、これだけ確認してください。

チェックできればOK
Tailwindで見た目を整えられるp-4, rounded-lg, text-sm が使える
Flexboxで並べられるflex, gap-4 が使える
Gridでカードを並べられるgrid, grid-cols-1, md:grid-cols-2 が使える
ボタンを作れるbutton を書ける
入力欄を作れるinput を書ける
onClick を見たことがあるクリック処理の入口が分かる

完璧でなくて大丈夫です。次章で何度も使います。

練習問題

問題1

第4章で主に学んだことはどれですか。

  • A. データベース設計
  • B. 画面の見た目とレイアウト
  • C. サーバー設定
  • D. 認証処理

答え

B

解説

第4章では、Next.js と Tailwind CSS を使って、レイアウト、余白、文字、レスポンシブ、UI模写を学びました。

問題2

次章で主に学ぶことはどれですか。

  • A. 画面の動き
  • B. 画像の圧縮
  • C. Gitの使い方
  • D. フォントの歴史

答え

A

解説

次章では、useStateonClickonChange などを使って、ユーザー操作に反応する画面を作ります。

問題3

Reactで、画面の中で変わる値を扱う代表的な機能はどれですか。

  • A. useState
  • B. className
  • C. alt
  • D. href

答え

A

解説

useState は、画面の中で変わる値を扱うために使います。

たとえば、入力中の文字や、ボタンを押した回数などです。

問題4

入力欄の文字が変わったときに使うイベントはどれですか。

  • A. onClick
  • B. onChange
  • C. onSave
  • D. onImage

答え

B

解説

onChange は、入力欄の内容が変わったときによく使います。

まとめ

第4章では、Next.js と Tailwind CSS を使って、画面を見やすく作る力 を学びました。

できるようになったことは、次の通りです。

できるようになったこと
並べるFlexbox、Grid
整える余白、文字、背景、角丸
画面幅に対応するmd:lg:
UIを真似するYouTube風UI
部品に分けるHeader、Sidebar、VideoCard

次章では、ここに 状態管理入力処理 を加えます。

今までは、

見た目を作る章 でした。

次からは、

操作すると変わる画面を作る章 です。

最後に覚える一言です。

第4章は見た目。次章は動き。

教材トップへ戻る