質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

232閲覧

React イベントハンドラの扱い方(onClick/onChange)

natsumi_1224

総合スコア2

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2025/03/19 05:29

実現したいこと

onClick/onChangeイベントを呼び出すときにアロー関数でラップすべきか?否か

  • Reactクリックイベント onClick={()=>handleClickTab(0)}
  • React入力イベント onChange={handleChange}

前提

ボタン操作によるタブの切り替え表示、入力値を画面に反映する。
2つの機能を実装しています。
イベントハンドラの呼び出し方について、
アロー関数でラップする/しないの判断基準を教えてほしいです。

クリックイベントハンドラをアロー関数でラップして実行している

Javascript

1 2export default function App() { 3 // useStateでタブの状態を管理、初期値は0 4 const [activeTab, setActiveTab] = useState(0); 5 6 const handleClickTab = (index) => { 7 setActiveTab(index); 8 }; 9 10 return ( 11 <div className="tab" role="tab"> 12 <div className="tab-list" role="tablist"> 13 <button 14 onClick={() => handleClickTab(0)} 15 className={clsx({ active: activeTab === 0 })} 16 > 17 タブ1 18 </button> 19 {activeTab === 0 && ( 20 <div className="tab-panel">ここにタブ1のコンテンツが入ります。</div> 21 )} 22 </div> 23 ); 24} 25

入力イベントはonChangeでそのまま呼び出し(アロー関数でラップしない)

Javascript

1export function App() { 2 const [text, setText] = useState(""); 3 4 const handleChange = (e) => { 5 setText(e.target.value); 6 }; 7 8 return ( 9 <div> 10 <input 11 type="text" 12 value={text} 13 placeholder="テキストを入力" 14 onChange={handleChange} 15 /> 16 <p>入力された内容👇</p> 17 <div className="output"> 18 {text} 19 </div> 20 </div> 21 ); 22} 23

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

区別はイベントの種類ではなく、ハンドラの引数の問題です。


onClick={()=>handleClickTab(0)}としていますが、こう書けばhandleClickTabには書いての通り0が渡されます。

一方で、onClick={handleClickTab}としてしまうと、handleClickTabの引数にはイベントオブジェクトが渡されます。数値が来るつもりで処理してしまえば正常動作はしません。


逆に、handleChangeは来たイベントオブジェクトのeから必要な値を取り出す関数です。onChange={e => handleChange(e)}でも動くことは動きますが、わざわざその場で関数を作るのが煩雑なだけです。

投稿2025/03/19 07:19

maisumakun

総合スコア146544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

natsumi_1224

2025/03/21 00:17

ありがとうございます☺️!! 何が渡されるかを意識すれば良かったのですね!! 個人的にonChange={e => handleChange(e)}が分かりやすかったです!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問