Reactをむずかしく感じる理由と、その解決法【その3】
2024.3.13
この記事は約2分で読めます
この記事の筆者:三好アキ
🔹 専門用語なしでプログラミングを教えるメソッドに定評があり、1200人以上のビギナーを、最新のフロントエンド開発入門に成功させる。
🔹 Amazonベストセラー1位を複数回獲得している『はじめてつくるReactアプリ with TypeScript』著者。
Amazon著者ページはこちら → amazon.co.jp/stores/author/B099Z51QF2
React、Next.js、TypeScriptなどのお役立ち情報や実践的コンテンツを、ビギナー向けにかみ砕いて無料配信中。登録はこちらから → 無料メルマガ登録
Reactが難しい原因は知識不足
【その1】に書きましたが、React入門に成功して、最初のハードルを超えた人が感じるReactの難しさの原因はJavaScriptの知識不足です。
具体的には次の2点です。
• function(コンポーネント)の記法
• イベントの記法
本記事で紹介するのは、2つ目の「イベントの記法」です。
イベントの記法がわかれば、Reactに感じる苦手意識はぐっと減ります。
1つ目の「functionの記法」は【その2】に書いてあるので、そちらをまだ読んでいない人は先に目を通してください。
本記事で説明する「イベント」の実態はfunctionだからです。
イベントとはfunctionのこと
Reactではさまざまな「イベント」が出てきます。
「イベント」とはユーザーがアプリ上でするアクションのことですが、React開発で出てくる90%以上は次の3つです。
• <button>
を押す
• <input>
に文字を入力する
• <form>
を提出(submit)する
これらのユーザーのアクションを検知するために、Reactでは次の専用コードを使います。
• <button>
を押す => onClick
• <input>
に文字を入力する => onChange
• <form>
を提出(submit)する => onSubmit
さて、ユーザーがこれらのアクションをしてくれたら、アプリは何らかの反応を返さないといけません。
もし「<input>
に文字を入力する」なら、その入力してくれた文字を表示することが反応になりますし、「<button>
を押す」なら「ポップアップを出す」といった反応です。
これらを担うのはfunctionなので、Reactの「イベント」とは常にfunctionと一緒であると想像できます。
具体的にコードで見てみましょう。
import { useState } from "react"
const List = () => {
const [data, setData] = useState("")
return (
<input onChange={(e) => setData(e.target.value)}/>
)
}
export default List
これは<input>
に入力した文字が、stateのdata
に書き込まれるコードになります。
ここで注目してもらいたいのは、<input>
タグ内の次のコードです。
onChange={(e) => setData(e.target.value)}
functionの記法いろいろ
このようにタグ内に書く記法(インライン方式)とともに、次のように別の場所で書いたものを持ってくる記法もあります。
import { useState } from "react"
const List = () => {
const [data, setData] = useState("")
const handleChange = (e) => {
setData(e.target.value)
}
return (
<input onChange={handleChange}/>
)
}
export default List
このように他所から持ってきても、最初のようにインラインで書いても、働きはまったく同じです。
ここで、なぜインラインでは下記の記法になるのかを説明します。
onChange={(e) => setData(e.target.value)}
まず最初に思い出してもらいたいのは、【その2】で解説したfunctionの記法のバリエーションです。
上のhandleChange
は、function
を使って次のように書いても働きは同じです。
import { useState } from "react"
const List = () => {
const [data, setData] = useState("")
function handleChange(e){
setData(e.target.value)
}
return (
<input onChange={handleChange}/>
)
}
export default List
onChange
のカッコ内に、このfunctionを丸ごと持ってくることもできます
import { useState } from "react"
const List = () => {
const [data, setData] = useState("")
function handleChange(e){
setData(e.target.value)
}
return (
<input onChange={function handleChange(e){
setData(e.target.value)
}
}/>
)
}
export default List
ここからは<input>
タグにだけ注目します。現時点では次のようになっています。
<input onChange={function handleChange(e){
setData(e.target.value)
}
}/>
これも【その2】で解説しましたが、functionの「名前」は省略できます。
次のようになります。
<input onChange={function(e){
setData(e.target.value)
}
}/>
ここで再びアローfunction(アロー関数)で書いてみましょう。function
を=>
に変えて、右にずらします。
<input onChange={(e) => {
setData(e.target.value)
}
}/>
アローfunctionでは{ }
を省略して1行で書けるので、次のようにも書けます。
<input onChange={(e) => setData(e.target.value)}/>
ここで、最初に見たインラインの記法とまったく同じになったと気がつきます。
さらにfunctionでは()
で渡されるもの(ここではe
)がひとつだけの場合は()
を省略できるので、次のようにも書けます。
<input onChange={e => setData(e.target.value)}/>
もし一つでない場合は()
が必要です。
<input onChange={(e, user) => setData(e.target.value)}/>
以上見てきたように、Reactのイベントもfunctionであり、functionの記法のルールが当てはまるとわかりました。
() =>
というコードだけ見ると、これが一体なにをしているコードなのかわかりませんが、その実態は名前を省略したアローfunctionなのです。
【その2】で解説したfunctionの記法、そして今回解説したイベントの記法をマスターすると、Reactのコードをより自信をもって書くことができるでしょう。
なお、先月リリースした新刊書『Reactマスター Zero To Hero:自信をもってReactコードが書けるようになる本』では、JavaScript/Reactの基礎の基礎から解説をしています。ぜひご覧ください。
Reactマスター Zero To Hero:自信をもってReactコードが書けるようになる本
【JavaScript/Reactの基礎から発展的内容まで全範囲を網羅。自信をもってReactを書けるようになる本】
メルマガ配信中
(from 三好アキ/エンジニア)
React、Next.js、TypeScriptなど最新のウェブ開発のお役立ち情報を、ビギナー向けにかみ砕いて無料配信中。
(*配信はいつでも停止できます)