2
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を使ってカウンターアプリを作成!【学習記録】

Posted at

はじめに

こんにちは!
未経験からエンジニアを目指して学習中のReoです。

前回はJavaScriptでシンプルなカウントボタンを作りましたが、
今回はReactを使って、カウンターアプリを作ってみました!

さらに、

  • 数を「増やす」だけでなく「減らす」機能
  • 「リセット」して0に戻す機能
    も追加して、より実用的な構成にしてみました!

改めてReactについて再確認し、前回と同じものを作成することで
JavaScriptとReactの違いを実感できると思います!

いざ実装!

まずは、VScode上のターミナルで以下のコマンドを実行します。
そうすることで、Next.jsアプリのひな型が作成されます。
コマンド入力後の質問に対しては、「App Routerを使う?」だけ「YES」にしています。

npx create-next-app@latest counter-app

これでアプリ用の環境構築ができました。
React雛形.png

注意
作業前にディレクトリを変更することを忘れない:cd counter-app

もし移動せずにnpm run dev を実行するとエラーになります。
→なぜなら package.json が見つからないから!
※package.jsonは「このアプリに何が必要か」「どう動かすか」をまとめた説明書のようなもの。

package.jsonの役割 内容
① 必要なライブラリを管理 例:React、Next.js、Tailwind など
② スクリプト(コマンド)を定義 例:npm run dev、npm run build
③ プロジェクトの情報を管理 アプリ名、バージョン、ライセンスなど

次に、ターミナルで「npm run dev」を実行して、現状どんなページが表示されるのか確認します。
すると、以下のような雛形ページが表示されるので、これにカウンターアプリの要素を盛り込んでいきます。
雛形ページ.jpeg

counter.jsxファイルを作成して、以下の画像のようにcounterのコンポーネントを作成しました。その際に、コメントアウトで何をしているのか整理してみています。

スクリーンショット 2025-07-07 23.24.05.png

page.js側でcounter.jsxをインポートして表示できるようにします。
表示場所としてはリストの下にしています。
スクリーンショット 2025-07-07 23.30.10.png

アロー関数ってなんだっけ?
JavaScriptの中で 「関数を短く書くための新しい書き方」 のこと!
以下の例のように関数が短く1行でかける!
例:
▼普通の関数
function handleIncrement() {
setCount(count + 1);
}
▼アロー関数
const handleIncrement = () => setCount(count + 1);

※もし複数の処理を行いたい場合は、以下のように{}で囲む。
const handleIncrement = () => {
console.log("増やしました");
setCount(count + 1);
};

実際にnpm run devコマンドで正しくページに表示されてるか確認してみます。
しかし、以下の画像のように「Build Error」が表示されてしまいました。
スクリーンショット 2025-07-07 23.28.54.png

原因としては、サーバー側で動かす定義ができていなかったこと。
というのも、Next.js(App Router構成)では、ページやコンポーネントはデフォルトでサーバーコンポーネントになっています。
ただし、useState や useEffect などのReact Hooksは「ブラウザ(クライアント側)」でしか使えません。

なので、Next.jsに「これはクライアント側で動かすよ」と明示的に伝えるためにcounter.jtxファイルの先頭に 'use client' を書きます。
スクリーンショット 2025-07-08 7.46.54.png

これでもう一度、npm run devを使用します。
今度はRuntime Errorが発生してしまいました。
スクリーンショット 2025-07-08 7.49.54.png
原因としては、関数名がCounterになっていなかったこと。
counter.jtx側では関数をAppで定義してしまっており、インポート側と関数名が違うことで読み込めていませんでした。
なので、関数名はCounterで統一します!

これでやっと、カウンターアプリが表示されるようになりました!
今回追加した機能の減少とリセットもうまく使用することができました。
スクリーンショット 2025-07-08 7.55.58.png

完成品

page.jsの余分な部分を削除して、page.jsファイルの先頭にもuse clientを定義すると完成です!
スクリーンショット 2025-07-08 8.10.49.png

学んだこと・つまずいた点

学んだこと

  • useState を使って状態(count)を管理する方法
  • JSXの中でイベント処理(onClick)を書く方法
  • コンポーネントの中で関数を定義して使えること

つまずいたこと

  • サーバー側で動かす定義ができていなかったこと
  • 関数名が相違して、うまく読み込めていなかったこと

まとめ

対応する関数名を間違えたり、機能がサーバー側なのかブラウザ側なのかの定義が必要なことを改めて意識しようと思いました!

次回は、
外部APIのSendBirdの使用を行いたいと思います!

最後まで読んでいただきありがとうございました!

2
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
2
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?