以下は、Next.js(App Router構成)とTailwind CSSを使って「テキストを入力 → ボタンを押して表示」するシンプルなUIを構成したコードです。
'use client'; // ← イベント処理を使うので必須
import { useState } from 'react';
export default function NekoInputPage() {
const [inputValue, setInputValue] = useState('');
const [output, setOutput] = useState('');
const handleClick = () => {
setOutput(inputValue);
};
return (
<main className="min-h-screen flex flex-col items-center justify-center bg-blue-50 p-6">
<h1 className="text-3xl font-bold text-blue-700 mb-6">テキスト入力デモ</h1>
<input
type="text"
className="border border-gray-300 rounded p-2 w-64 mb-4 text-black"
placeholder="名前を入力してください"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
<button
className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700"
onClick={handleClick}
>
表示する
</button>
<div className="mt-6 text-xl text-blue-800">
{output && <>こんにちは、<strong>{output}</strong> さん!</>}
</div>
</main>
);
}
'use client'
とは?Next.js(App Router)では、状態管理やイベント(onClickなど)を使いたい場合、この宣言で「このコンポーネントはブラウザ側で動かす」と指定する必要があります。
const [inputValue, setInputValue] = useState('');
const [output, setOutput] = useState('');
inputValue
:テキストボックスの現在の内容output
:表示用の文字列(ボタンを押した後に表示)const handleClick = () => {
setOutput(inputValue);
};
ボタンがクリックされたとき、入力値を出力用の状態にセットします。
value
とonChange
で状態管理handleClick
が発動output
があれば挨拶文を表示[入力欄] → (onChange) → inputValue(状態) ↓ [ボタンを押す] ↓ output に反映 ↓ [出力エリアに表示]
クラス名 | 意味 |
---|---|
text-black | テキストの色を黒に |
bg-blue-50 | 背景を薄い青に |
rounded | 角を丸く |
hover:bg-blue-700 | ボタンにホバー時の色を追加 |